1

SQL Server 2012 Express Edition での運用環境でクロスデータベース クエリで奇妙な問題が発生しました。私の開発環境ではこれを作成できないので、名前付きインスタンスとしてデフォルト設定でインストールされたサーバーの構成に何かがあると考えています。

これはクエリ実行のパフォーマンスの問題ではありません。これはデータベース接続の問題です。

次のクエリを使用します (MyTable には約 100 行あります)。

SELECT COUNT(*) FROM MyDatabase..MyTable

実行時間は約 4 秒です。クライアント統計によると、クライアント処理時間は 0 で、「サーバー応答の待機時間」が実行時間の残りの 4 秒を占めています。

最初USE MyDatabaseにクエリを実行してから実行すると、すぐに実行されます。それらを順番に実行すると:

USE MyDatabase
GO
SELECT COUNT(*) FROM MyDatabase..MyTable

USE MyDatabaseステートメントの実行には長い時間がかかるため、それでもさらに時間がかかります。テーブル名がデータベース名で完全修飾されているかどうかは問題ではなく、シノニムを使用しても状況が変わります。過去に似DBCC CHECKDB(<dbname>)たようなものに出くわして修復したようですが、今回は適切に動作させることができません。接続のwait_typeinは、SPID ステータスの一般的なものです。システムの修復と再起動を試みましたが、うまくいきませんでした。この種のことは、認証の問題に根ざしているように思えますが、それを修正するために何をすべきかわかりません.sys.dm_exec_requestsIO_COMPLETIONsuspended

追加した:

たまにDatabase 'MyDatabase' is being recovered. Waiting until recovery is finishedメッセージが来ます。SQL Server 2012 インストール ツールも使用して完全修復を実行しました。何か案は?

4

1 に答える 1

2

原因はデータベースの AUTO_CLOSE プロパティだったようです。これをオフにするALTER DATABASE MyDatabase SET AUTO_CLOSE OFF WITH NO_WAITと、問題が解決したようです。

于 2014-01-14T21:00:18.683 に答える