-
Notifications
You must be signed in to change notification settings - Fork 0
MS_SQLServerManagement
- 戻る(SQL Server)
SQL Server の管理 > ログ > プロファイラ、トレース
ディスク I/O を減らす系の作業が多い。
- メンテナンス プランの作成
https://learn.microsoft.com/ja-jp/sql/relational-databases/maintenance-plans/create-a-maintenance-plan
インデックスの再構築・デフラグ(MS_IndexRebuildAndDefrag.md)
データ ファイルの圧縮と拡張(MS_DataFileShrinkAndGrow.md)
補足(縮小は基本的に行わない):
DBCC SHRINKFILE/SHRINKDATABASEは
定常のメンテナンス プランに入れてはならないというのが現在の定説。
- ページを末尾から先頭へ移動するため、インデックスが激しく断片化する
- 縮小した領域は結局また拡張されるので、
縮小 → 断片化 → 再構築 → 拡張という不毛なループになる- 拡張時にはファイルの初期化(ゼロ埋め)が発生し、
その間の書き込みが待たされる実施するのは、大量削除やアーカイブ後など
恒久的に空き領域が生じたときの単発作業に限り、
実施後は必ずインデックスを再構築する。
データ ファイルの拡張が遅い場合は、
瞬時ファイル初期化(サービス アカウントに
「ボリュームの保守タスクを実行」権限を付与)を有効にすると改善する
(ログ ファイルには適用されない)。
SQL Server では、DBCC CHECKDB ステートメントを使用して、
指定された DB 内の、すべての DB オブジェクトの割り当てと構造的整合性を
チェック、修復することができる。
-
オンラインでの実行
-
DBCC CHECKDBステートメントは、スキーマ ロックを保持する。 - スキーマ ロックとのロックの互換性から、
オンライン操作(DML ステートメント)は許可されるが、
DDL ステートメントは許可されないので注意する。
-
-
処理の負荷
-
DBCC CHECKDBステートメントは、CPU とディスクに大きな負担がかかる。 -
まず、チェックする「データ ページ」が、メモリに読み込まれなければならない。
-
その上、tempdb を使用してデータを並べ替える。
-
また、ログの読み取りが終了するまで
「トランザクション ログ」の切り捨てをブロックするため、
DBCC CHECKDBステートメントの実行中にトランザクションを
活発に実行すると、「トランザクション ログ」が増大し続ける。
-
-
このため、サーバの負荷が軽い時間帯に、
DBCC CHECKDBステートメントを実行することが推奨される。 -
オンライン処理の性能に影響を与えないための推奨事項
-
システムの使用率が低いときに実行する。
-
他のディスク I/O 操作を実行していないことを確認する。
-
tempdb を別のディスク システム、または高速なディスク サブシステムに配置する。
-
tempdb が拡張できるように、ドライブに十分な空き領域を用意する。
-
オプション
-
ESTIMATE ONLYオプション
tempdb に必要な空き領域のサイズを見積もる。 -
NO_INFOMSGSオプション
処理量と tempdb の使用率を減らす。 -
PHYSICAL_ONLYオプション
チェック内容を、DB の物理的一貫性のみの
低オーバーヘッド チェックに変更する。
-
-
移行メモ(正誤):
ESTIMATE ONLYは正しくは
ESTIMATEONLY(スペースなし)である。
補足(DBCC CHECKDB の運用):
- SQL Server 2005 以降、
DBCC CHECKDBは
内部スナップショットに対して実行されるため、
実際には長時間のスキーマ ロックを保持しない
(WITH TABLOCKを指定した場合を除く)。
ただし、スナップショット用の領域がデータ ファイルと
同じボリュームに作られるため、空き容量は必要。- 大規模 DB では、
PHYSICAL_ONLYを平日に、
フルチェックを週末に、といった二段構えが現実的。
さらにDBCC CHECKFILEGROUP/CHECKTABLEで分割実行する手もある。REPAIR_ALLOW_DATA_LOSSは最後の手段。
名前のとおりデータが失われる。まず
SQL Server のバックアップからの復元を検討する。- 破損の多くはストレージ層に起因する。
PAGE_VERIFY CHECKSUM(既定)を有効にしておき、
msdb.dbo.suspect_pagesとイベント ログを監視する。
パーティション毎、異なる圧縮オプションを使用できる。
- ページ圧縮
- 行圧縮
- プレフィックスの圧縮
- 辞書の圧縮
ディスク I/O を減らすが、CPU 時間は増える。
詳細は SQL Server データ圧縮を参照。
ディスク・コントローラの I/O 性能をフル活用する。
- RAID(
MS_RAID.md) - ディスク・レイアウト
スパース列として設定
問題を監視する。
- サーバーの監視
- ログの監視
- SQLプロファイラ(SQLトレース)
- データベースのサイズの監視(アーカイブなど)
- SQL Server 問題の分析方法
- .etc
並列クエリによる性能向上も可能だが、
主に保守・運用時のデータ・メンテナンス性能に効果を発揮。
移行メモ(誤字): 元ページの「保守・運用時時」は「保守・運用時」の誤記。
- オンライン性能向上であれば、分割キーによるシャーディングを検討。
- データベース シャーディングの基本
https://learn.microsoft.com/ja-jp/azure/azure-sql/database/elastic-scale-introduction
補足(最新化:現在の運用の勘所): 元ページは
「ディスク I/O を減らす」という当時の主眼で構成されているが、
現在はストレージが SSD / NVMe になり、ボトルネックの所在が変わっている。
定常運用で押さえるべき点は概ね以下。
項目 現在の指針 インデックス メンテナンス 断片化率で分岐(〜5% 何もしない / 〜30% REORGANIZE/ 30%〜REBUILD)。SSD では断片化の影響自体が小さい統計情報 自動更新に任せつつ、大きなテーブルは明示的に UPDATE STATISTICS。SQL Server 2016 以降は既定のサンプリング閾値が改善整合性チェック DBCC CHECKDBを定期実行し、結果を監視バックアップ 復旧モデルに応じた完全/差分/ログのセット(SQL Server の障害復旧) 監視 待ち事象( sys.dm_os_wait_stats)とクエリ ストアを起点にするメンテナンス プランの GUI よりも、
Ola Hallengren のメンテナンス スクリプトを使うのが実務では一般的。
Tags: 移行, データアクセス, SQL Server
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。