トップ回答者
データベースメールにてサイズの大きいメールを送信・削除してもsysmail_mailitemsの領域が開放されない

質問
-
同様の症状が検索できなかったので、情報として書かせていただきます。
環境:Win2K3 SP1, SP2, XP SP3 + SQL 2005 SP2 + 各種累積パッチ(CU9でも確認)
データベースメールにてサイズの大きいメール(8000バイト以上です)を定期的に送信していますが、送信したメールはmsdbのsysmail_mailitemsに残っています。これを削除するためBooks Onlineに例示のあるストアド(sysmail_delete_mailitems_sp)にて削除しているのですが、ストアド実行後のテーブル内の行数がゼロにもかかわらず、テーブルの領域が全て開放されないことがあります。このため日々msdbのデータベース全体が拡張されてしまう現象が起きています。
サイズが大きくないメールの場合は、ちゃんと開放されるようですが、LOBと判断されるメールの場合は一部か全てが開放されないように見えます(Reporting Serviceにて領域の確認してます)。どうにもできないので、危険と思われますが、以下のコードのように外部キー制約を削除してTruncate Tableにて対応しています。
Code Snippetuse msdb
ALTER TABLE [dbo].[sysmail_attachments] drop CONSTRAINT [FK_sysmail_mailitems_mailitem_id]
ALTER TABLE [dbo].[sysmail_send_retries] drop CONSTRAINT [FK_mailitems_mailitem_id]
gouse msdb
truncate table sysmail_send_retries
truncate table sysmail_attachments
truncate table sysmail_mailitems
gouse msdb
ALTER TABLE [dbo].[sysmail_attachments] WITH CHECK ADD CONSTRAINT [FK_sysmail_mailitems_mailitem_id] FOREIGN KEY([mailitem_id])
REFERENCES [dbo].[sysmail_mailitems] ([mailitem_id])
ON DELETE CASCADEALTER TABLE [dbo].[sysmail_send_retries] WITH CHECK ADD CONSTRAINT [FK_mailitems_mailitem_id] FOREIGN KEY([mailitem_id])
REFERENCES [dbo].[sysmail_mailitems] ([mailitem_id])
ON DELETE CASCADEALTER TABLE [dbo].[sysmail_attachments] CHECK CONSTRAINT [FK_sysmail_mailitems_mailitem_id]
ALTER TABLE [dbo].[sysmail_send_retries] CHECK CONSTRAINT [FK_mailitems_mailitem_id]
go同様の現象にあわれている方の参考になれば幸いです。
回答
-
yakkenさん、こんにちは!中川俊輔です。
領域が解放されないことについて、下記の技術文書がありました。
FIX: ゴースト行クリーンアップ スレッドは、 SQL Server 2005 でデータベースのいくつかのデータ ファイルの非実体行を削除しません。
http://support.microsoft.com/?scid=kb%3Bja%3B932115&x=13&y=11
Cumulative update8に含まれる修正なので、Cumulative update9が適用済みならば
回避策に書いてあるように、DBCC SHRINKFILEコマンドを実行することで領域を解放できるようです。
違う原因だったらごめんなさい!
それでは。
この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。
コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。
すべての返信
-
yakkenさん、こんにちは!中川俊輔です。
領域が解放されないことについて、下記の技術文書がありました。
FIX: ゴースト行クリーンアップ スレッドは、 SQL Server 2005 でデータベースのいくつかのデータ ファイルの非実体行を削除しません。
http://support.microsoft.com/?scid=kb%3Bja%3B932115&x=13&y=11
Cumulative update8に含まれる修正なので、Cumulative update9が適用済みならば
回避策に書いてあるように、DBCC SHRINKFILEコマンドを実行することで領域を解放できるようです。
違う原因だったらごめんなさい!
それでは。
この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。
コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。
-
こんにちは、フォーラムオペレータの田中麻記子です。yakkenさん、フォーラムのご利用と貴重な情報の投稿をどうもありがとうございます。弊社中川俊輔の情報がすっきりと問題を解決、とはいかなかったようで心苦しいのではありますが
yakkenさんさんから頂いた情報と弊社中川が提供させて頂いた情報を他のユーザーの方々とも共有していただくために私のほうで回答済みチェックをつけさせていただきました。もし、yakkenさんがこの件に関してさらに投稿がおありの場合は回答済みチェックを外していただいてもかまいませんのでよろしくお願いします。それでは、今後も是非フォーラムをご利用ください!