- ベストアンサー
SQL Server時間切れについて
初めまして。SQL初心者です。 あるシステムにおいて、SQLサーバが無応答?になり、システムがダウンしてしまい、困っています。 Windows2000Server、SQL Server2000、VB6を用いてDBに定期的にRead&Write、及び各種のデータ表示を行っています。 ADOを使用して、接続や各コマンドを実行しているのですが、ごくたまに以下のエラーが出てしまいます。 Code:-2147217871,Description:時間切れになりました。Source:Microsoft OLE DB Provider for SQL Server,SQL State:HYT00,NativeError:0 過去ログや他サイトを調べた結果、コネクションのCommandTimeoutの秒数を延長させる、とあったので60秒に変更しました。 が、不定期(大体1週間~10日前後で夜中や朝方などにもあり)にこのエラーが出てしまい、約1時間~1時間半もダウンしています(この間のエラーをOn Errorではじいてログファイルに保存しています)。 毎分必ず実行しているストアド(20装置分のデータをUPDATEするので1分に20回実行する)があるのですが、必ずと言っていいほどこのストアド実行中に落ちています。 このストアドに5~6個のパラメータを渡し、複数のテーブルに対してUPDATE処理を行っています。 正常に動作している時は、数日間全く問題無いので、ストアドやVBのコードに間違いは無いと思います。 そこで、SQL Serverの設定等を見直したところ、1つ気になったところが。データベースファイル \Microsoft SQL Server\MSSQL\Data\aaa.MDF のサイズが14Gになっていました・・・。 このファイルにアクセスする時にSQL Serverで高負荷になってしまい、無応答のような状態になってしまうのでは?と思っていますがどうでしょう? 不定期に発生し、かつ再現性が無く、原因が掴めずに本当に困っています。 先輩方、何でも良いのでアドバイスをお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
14Gですか・・・大きいですね。 データの構造がどうなのか解らないので、 容量的に妥当かどうかはわかりませんが、 一度インデックスの再構築と圧縮を掛けてはどうでしょうか CREATE PROCEDURE SP_COMPRESS AS DECLARE @name varchar(30) DECLARE tnames_cursor CURSOR FOR SELECT name FROM sysobjects WHERE type = 'U' OPEN tnames_cursor FETCH NEXT FROM tnames_cursor INTO @name WHILE (@@fetch_status <> -1) BEGIN PRINT @name + 'のDBREINDEX...' EXEC ('DBCC DBREINDEX ('+ @name + ')' ) FETCH NEXT FROM tnames_cursor INTO @name END DEALLOCATE tnames_cursor dbcc SHRINKFILE("SampleDb_Log",1) DBCC SHRINKDATABASE("SampleDb",1) GO データベース名は自分の環境に合わせてください。 また、バックアップは必ず取っておいてください。 14Gもあれば結構時間がかかると思いますが・・・ とりあえず参考程度に・・・
その他の回答 (1)
データベースの構造をどうされているかわかりませんが、ログ領域をたくさんとっていて、ログがいっぱいになったりしていませんか? そんなときにDBに更新・追加やバックアップ処理等が行われると、ログ領域が足りず、エラーになったりします。14Gというと相当大容量なサイズですが、ログの切捨てを実施する事をお勧めします。 コマンドからでもよいですが、SQLServerでお使いのデータベースを右クリックし、データベースの編集を選べば、ログの切捨てが選べると思いますがどうでしょう? 後コマンドタイムアウトですが、あれって0だか-1だかに設定するとタイムアウトしないようにできませんでしたっけ?フリーズするというのなら、タイムアウトしないようにしたところでしようがないんですが一応。
お礼
sekiguchi-dさん ご回答ありがとうございます。 私の方でもソースコードの方ではなく、SQL Serverの設定自体に問題があるのでは、、、と疑っています。 ログ切捨てですね。 試してみます。 それで連続運転してみるしかないですかね・・・。 コマンドタイムアウトは0(無制限)だったと思います。
お礼
misty7666さん 早速のご回答、ありがとうございます。 試してみます。