質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

8047閲覧

SQL Serverのトランザクションログが増えないように対策したい

yude_tamago

総合スコア5

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2020/04/03 06:19

前提・実現したいこと

SQL Server(Express Edition)を使って、開発を行っています。
復旧モデルを「完全」にしてしばらく開発をしていたら、トランザクションログ(.ldfファイル)がHDDの大半を占有していたことに気づいたので
同ログを圧縮後、復旧モデルを「単純」に変更して同ログの推移を調査しています。

発生している問題・エラーメッセージ

仕様上、今回の開発では同ログは必要ないので、
同ログが増加しないように対策をしたいと考えています。
(もしくは増加しても定期的に圧縮されるような対策)

そこでDBに対して以下のコマンドを定期的(20分に1回)に発行するようにしました。

DBCC SHRINKFILE(ログファイル, 5000)

ですがdbcc sqlperf('logspace')を行って様子を見ているとLog Space Used(%)の値が徐々に増加しています。
(正確には減少と増加を繰り返しており、現在は10~20%になっています)

質問

1、定期発行のコマンドによってある程度はログが圧縮されているように見えますが、このまま長期稼働をしているといずれログがいっぱいになるのではないかと推測しております。
対処方法として定期発行のコマンドを行うことは間違えてないでしょうか?

2、Log Space Used(%)の増加量はDBに対する更新処理のデータ量と比例する、認識で正しいでしょうか?

試したこと・わかっていること

・復旧モデルを「単純」、自動拡張を有効にしたところ、本来やりたいDBへの更新処理が(自動拡張のタイミングのみ)遅くなることが分かりました
・そのため現在は復旧モデルを「単純」、自動拡張は無効にしています
log_reuse_waitは「13」、log_reuse_wait_descは「OLDEST_PAGE」が表示されています
(DBの再起動直後は「NOTHING」ですが時間経過とともに上記に変わります)
・復旧時間(チェックポイント)のオプションは「60」になっています

SQLについては初学者も同然なレベルで恐れ入りますが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単純復旧モデルなら、バックアップを取るだけで勝手にログを切り捨ててくれるはずです。
Express Editionだとバックアップツールがないのでこんな風にストアドを登録して、
タスクスケジューラで実行すると良いですよ。

投稿2020/04/04 09:19

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yude_tamago

2020/04/06 00:35 編集

hihijijiさん 回答ありがとうございます。ご紹介いただいたリンクも参考になりそうです。 一回試してみますのでもう少しお時間ください。
yude_tamago

2020/04/07 01:39

hihijijiさん 遅くなってすみません。ご紹介いただいたリンクでバックアップの取り方を確認できました。大変参考になりました、ありがとうございました。 追加で質問させていただきたいのですが 「単純復旧モデルの場合ログは自動的に切り捨てられるのでバックアップを定期的に行う必要はない。それ以外の復旧モデルの場合はバックアップを定期的に行う必要がある」 という認識は正しいでしょうか? もしよろしければご回答いただけると幸いです。
hihijiji

2020/04/07 01:54

私は定期的なバックアップを行わないと言う選択肢を持ってません。 ・単純復旧モデルを採用する場合には日に一度DBを使わない時間にバックアップをする。 ・それ以外のモデルの場合は都度バックアップをする。 この2つです。 差分バックアップかフルバックアップかなど細かくはコンサルティング案件になるので状況に応じてとしか答えられません。
yude_tamago

2020/04/07 02:34

hihijijiさん ご回答ありがとうございます。なるほど、「プログラム(sqlserver.exe)上の動作として」という意図で質問させていただきましたが、たしかに運用を考えると「バックアップを行う必要はない」と考えること自体に問題がありましたね。 差分・フルについては調べてから運用を考慮して検討します。 リンクのご紹介やバックアップの考え方について挙げていただき、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問