動作環境
Windows2003Server
SQLServer2005
上記の環境で、あるデータの集計システムを開発しております。
以前までは32ビットマシンでSQLServer2000を使用していたのですが、64ビットマシンでSQLServer2005にてサーバリプレースを行いました。
上記で稼動していたバッチプログラムやストアド等はそのままです。
その状態で、SQLServer2000の時に2hくらいかかっていたストアドの処理をSQLServer2005上でキックしたところ、1日、2日経過しても完了しないのです。
(正確にはVBSで作成したスクリプト内にその該当ストアドをexecする記述を
書いて、そのスクリプトを起動させています。)
ストアドの内容として、メインのストアドをキックすると、サブストアドが2つキックされ、またそのサブストアドから孫ストアドがいくつかキックされるという作りになっています。
そのストアドが起動した状態で、SQLServer側の利用状況モニタを参照すると
メインストアド、サブストアド、孫ストアドのスレッド計5プロセスの中の1つがrunnableの状態を除いてその他4プロセスが、状態:suspended、待機の種類:CXPACKETとなっており、その状態で1日、2日経過してもストアドの処理が終わりません。
ネットでもいろいろとこの現象について調べ、MAXDOPのチューニングを実施し、使用するプロセッサを1つにして並列処理を抑制したりしましたが、問題が改善されることはありませんでした。
恐らく同じ現象の方だと思いますが、以下URLでも解決には至っていないみたいです。
http://www.dbtalk.net/microsoft-public-sqlserver-server/sql-2005-64bit-query-stops-308630.html
もう一点、腑に落ちないところがあり、
バックアップからデータベースを復元したあと、上記の処理を流すと
一回目は正常に2時間程で終了しますが、二回目以降だと上記現象が
発生してしまいます。
上記の現象について回避できるかご存知の方はご教授お願いします。
ちなみにサービスパック1は適用済みです。
非常に長文になり申し訳ありませんが、よろしくお願いします。
> そのストアドが起動した状態で、SQLServer側の利用状況モニタを参照すると
> メインストアド、サブストアド、孫ストアドのスレッド計5プロセスの中の1つがrunnableの状態を除いてその他4プロセスが、状態:suspended、待機の種類:CXPACKETとなっており、その状態で1日、2日経過してもストアドの処理が終わりません。
--
お疲れ様です。
TimberLandChapel です。
さて,まずはこちらを参照ください。
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=480953&SiteID=1
まったく同じ現象かどうかは不明ですが,
"CXPACKET" の suspend の現象のようです。
こちらでは,
・MAXDOP の設定
・統計情報の完全更新
・DateTime 型のサブクエリの変数への置き換え
を行って実行プランを変化させています。
KT さんのクエリで DateTime 型のサブクエリを使用している場合はすぐに試せると思います。
一方,他の現象でしたら,
もういちど実行プランと格闘することになると思います。
いかがでしょうか?
----------
TimberLandChapel
http://blogs.timberlandchapel.com/blogs/timberlandchapel/
早速のご返答ありがとうございます。
KTです。
Timberさんからご教示頂いたサイトについて
現象としては同じだと思います。
そして、私もサイトのSiggyさんと同じく
1.MAXDOPの設定を変更しても現象は改善されませんでした。
2.統計情報の完全更新はまだやっていませんが、Siggyさんの結果だけみると
駄目っぽいですね。。(念のためこれからやってみますが)
3.サブクエリにDateTime 型の変数が存在してますのでSiggyさんの実施結果と
同じ結果が取得できています。
3.の結果からみて、クエリプランを変更すればうまくいくかもしれませんが、
前提として2000サーバで使用できていたSPが2005サーバで使用できなくなるのは
単純に考えて変だと思うのですが。。。(しかもクエリプランを変更するとなると結構な工数がかかってしまい困ってます。。私事ですが。。。)
この問題ってやっぱりSiggyさんが言ってるように2005サーバでのクエリ解決に問題があるんでしょうか。
と、Timberさんにお聞きするべきことではないと思いますが、ご見解をお聞かせ頂ければ幸いです。
以上、ぜひよろしくお願いいたします。
"TimberLandChapel" からの元のメッセージ:
> 3.の結果からみて、クエリプランを変更すればうまくいくかもしれませんが、
> 前提として2000サーバで使用できていたSPが2005サーバで使用できなくなるのは
> 単純に考えて変だと思うのですが。。。(しかもクエリプランを変更するとなると結構な工数がかかってしまい困ってます。。私事ですが。。。)
>
> この問題ってやっぱりSiggyさんが言ってるように2005サーバでのクエリ解決に問題があるんでしょうか。
--
お疲れ様です。
TimberLandChapel です。
SQL Server 2005 はデータベースとしても様々な変更が施されています。
http://blogs.timberlandchapel.com/blogs/timberlandchapel/archive/2006/05/06/721.aspx
↑のように既にSP1で解消された問題もあります。(Microsoft のすばやい対応に感謝します)
KT さんの遭遇された問題がバグなのかどうかということは
プロダクトフィードバック(http://go.microsoft.com/fwlink/?linkid=34178)に送信して
広く再現性を確認して,Microsoft に確認してももらわないといけません。
ひとまず言えることは,
引用のサイトで取っている変数化の回避策をお試しいただくことをお勧めします。
ということです。
手が空きましたら,
既に同様のフィードバックが出ていないか確認して,自分も検証を行ってみます。
----------
TimberLandChapel
http://blogs.timberlandchapel.com/blogs/timberlandchapel/