• ベストアンサー
  • 困ってます

SQL Server時間切れについて

  • 質問No.1324554
  • 閲覧数15320
  • ありがとう数10
  • 回答数2

お礼率 93% (29/31)

初めまして。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で高負荷になってしまい、無応答のような状態になってしまうのでは?と思っていますがどうでしょう?

不定期に発生し、かつ再現性が無く、原因が掴めずに本当に困っています。
先輩方、何でも良いのでアドバイスをお願い致します。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー
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もあれば結構時間がかかると思いますが・・・

とりあえず参考程度に・・・
お礼コメント
aruaru555

お礼率 93% (29/31)

misty7666さん
早速のご回答、ありがとうございます。
試してみます。
投稿日時:2005/04/11 15:29

その他の回答 (全1件)

  • 回答No.2
データベースの構造をどうされているかわかりませんが、ログ領域をたくさんとっていて、ログがいっぱいになったりしていませんか?

そんなときにDBに更新・追加やバックアップ処理等が行われると、ログ領域が足りず、エラーになったりします。14Gというと相当大容量なサイズですが、ログの切捨てを実施する事をお勧めします。

コマンドからでもよいですが、SQLServerでお使いのデータベースを右クリックし、データベースの編集を選べば、ログの切捨てが選べると思いますがどうでしょう?

後コマンドタイムアウトですが、あれって0だか-1だかに設定するとタイムアウトしないようにできませんでしたっけ?フリーズするというのなら、タイムアウトしないようにしたところでしようがないんですが一応。
お礼コメント
aruaru555

お礼率 93% (29/31)

sekiguchi-dさん
ご回答ありがとうございます。
私の方でもソースコードの方ではなく、SQL Serverの設定自体に問題があるのでは、、、と疑っています。
ログ切捨てですね。
試してみます。
それで連続運転してみるしかないですかね・・・。
コマンドタイムアウトは0(無制限)だったと思います。
投稿日時:2005/04/11 21:10
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ