SQL Server/チューニング
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
-[[SQL Server で最低限設定が必要な内容:https://qiita.com/...
-[[Dr. K's SQL Serverチューニング研修:http://www.atmarkit...
-[[真・Dr. K's SQL Serverチューニング研修:http://www.atma...
-[[Run Best Practices Analyzer Scans and Manage Scan Resu...
-[[SQL Server の再生のマークアップ言語 (RML) ユーティリテ...
-[[SQLパフォーマンスtips(SQLServer):https://qiita.com/kaz...
-[[インデックスと実行計画を理解する@SQLServer:https://qii...
-[[ZOZOTOWNの冬セール負荷対策で実施したDBサーバーのCPUボ...
*SQL Server チューニングのポイント [#qbcbf991]
-[[SQL Server のチューニングについてまとめてみる - その 2...
**トランザクション分離レベル [#s786a867]
-[[【SQL server】トランザクション分離レベルについて:https...
-[[【解決方法】SQL Serverデフォルト設定(READ COMMITTED SN...
-[[DBMSのロック・分離戦略と同時実行制御:https://techinfoo...
-SQL Server では READ_COMMITTED_SNAPSHOT がデフォルトで OFF
--オーバーヘッドが大きくなることなどが理由か
-※ SQL Azure では、READ_COMMITTED_SNAPSHOT がデフォルトで...
-分離レベルのデフォルト値は READ COMMITTED が設定されている
-SQL Server の READ COMMITTED は、、select for update の...
-Oracle の READ COMMITTED (他で未コミットのレコードは変...
ALTER DATABASE [Database Name]
SET READ_COMMITTED_SNAPSHOT ON;
-MVCC(READ_COMMITTED_SNAPSHOTをON)にすると同時実行性が高...
**インデックス不足解消 [#md3eb931]
**ロックの最小化 [#hab0be24]
**暗黙の型変換の抑制 [#b417c5d8]
-[[SQL Server のチューニングについてまとめてみる - その6 ...
-条件に指定するカラムに対し、違う型の値で条件を指定すると...
-Index Scan が発生することでパフォーマンスが落ちる
-Index Scan を発生させないためには、暗黙の型変換を発生さ...
--例:nvarchar の列に対して、正しい型で条件を指定
---×:WHERE NationalIDNumber = 295847284
---○:WHERE NationalIDNumber = N'295847284'
**コンパイル回数の低減 [#e3cd4cbd]
*SQL Server Management Studio [#t415538b]
*動的管理ビュー [#y057955f]
-[[動的管理ビューおよび関数 (Transact-SQL):https://msdn.m...
-[[SQLServer: 知ってると便利なDMV(動的管理ビュー)まとめ:h...
-SQL Server のチューニングには、dm_* で始まる動的管理ビュ...
**主要テーブル [#r3a17faf]
-sys.dm_db_missing_index_group_stats ... 欠落インデックス...
-sys.dm_db_missing_index_groups ... sys.dm_db_missing_ind...
-sys.dm_db_missing_index_details ... 欠落したインデックス...
*インデックスの調査 [#f1d975b8]
-[[インデックスの統計内容について参照してみる:http://ryuc...
**インデックス不足数の調査 [#l9a9373a]
SELECT DB_NAME(database_id) as [データベース名],
count(*) as [期待しているインデックスが存在しない...
FROM sys.dm_db_missing_index_details
GROUP BY DB_NAME(database_id)
**インデックスを作成した場合のパフォーマンス改善率 [#h40b...
USE [データベース名]
SELECT gs.avg_user_impact AS [予測されるクエリパフォーマ...
gs.last_user_seek AS [最後にシークした時間],
id.statement AS [テーブル名] ,
id.equality_columns AS [等値述語に使用できる列],
id.inequality_columns AS [不等値述語に使用できる...
id.included_columns AS [包括列として必要な列],
gs.unique_compiles AS [コンパイルおよび再コンパイ...
gs.user_seeks AS [クエリによって発生したシーク数]
FROM sys.dm_db_missing_index_group_stats AS gs
INNER JOIN sys.dm_db_missing_index_groups AS ig
ON gs.group_handle = ig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS id
ON ig.index_handle = id.index_handle
WHERE id.[database_id] =DB_ID() Order By gs.last_user_s...
**インデックス統計情報の参照 [#ecb329c9]
SELECT [テーブル名] = t.name,
[統計名] = s.name,
[統計の自動作成] = s.auto_created,
[NORECOMPUTEオプション] = s.no_recompute,
[フィルター定義] = s.has_filter,
[フィルター定義] = s.filter_definition,
[行数] = sp.rows,
[フィルター化されていない行数] = sp.unfiltered_ro...
[ステップ数] = sp.steps,
[サンプリング行数] = sp.rows_sampled,
[統計情報最終更新日] = sp.last_updated
FROM sys.tables AS t
INNER JOIN sys.stats AS s
ON s.object_id = t.object_id
CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.st...
ORDER BY t.name OPTION (RECOMPILE);
*コネクション数の調査 [#i1a555ae]
-[[「.NET」と「ASP.NET」からのSQL Serverへのコネクション...
-接続元ホスト毎のコネクション数を確認
select hostname,count(*) from master..sysprocesses where...
-(接続元ホスト, プログラム名, ステータス)毎のコネクショ...
select hostname,proguram_name,status,count(*) from maste...
-生データの確認
select * from master..sysprocesses where hostname!='';
*クエリの調査 [#v00001be]
**ステートメントのプロファイル情報確認 [#k0fd5efc]
-SET STATISTICS PROFILE ON
--SQL文の前にこれを付けて実行すると、ステートメントのプロ...
**クエリパフォーマンスの調査 [#h6bc5ac4]
SELECT [平均実行時間(msec)] = total_elapsed_time / execu...
[平均CPU時間(msec)] = total_worker_time / executi...
[平均物理I/O数] = total_physical_reads / executio...
[平均論理I/O数] = (total_logical_reads + total_lo...
[SQL文] = SUBSTRING(est.text, (statement_start_of...
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(est.text)
ELSE statement_end_offset
END - statement_start_offset) / 2) + 1)
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS est
*実行プランの調査 [#r857e6a6]
-[[SQL Server のチューニングについてまとめてみる - その7 ...
-[[SQL Server のチューニングについてまとめてみる - その19...
*パフォーマンス低下の防止策 [#n84ac3a1]
**トランザクションログの自動拡張の増分調整 [#w07baf6e]
-[[トランザクション ログ ファイルのサイズの管理:https://d...
*データベースの状態調査 [#u14c8726]
-[[設定の内容とか、ログの使用量とかのデータベースの状態を...
*問題 [#qf3554f8]
**クエリパフォーマンスの低下 [#af18d1ef]
-[[どうする? SQL Server のクエリ パフォーマンスが低下し...
*パフォーマンス改善の施策 [#rb7b58c2]
**統計情報の更新 [#h1a138ce]
-テーブル単位の更新
UPDATE STATISTICS テーブル名;
-データベース全体
EXEC sp_updatestats;
**実行プランの再生成 [#y2ff3abe]
-インスタンス単位
DBCC FREEPROCCACHE;
**インデックス再構築 [#h554e3a6]
-インデックス指定
ALTER INDEX <インデックス名> ON <テーブル名> REBUILD;
-テーブルに関連する全てのインデックス
ALTER INDEX ALL ON <テーブル名> REBUILD;
*参考URL [#xa3f9034]
**[[都内で働くSEの技術的なひとりごと:http://ryuchan.haten...
大変勉強になります。
-SQL Server のチューニングについてまとめてみる
--[[- その1 - ( インデックスの調査 ):http://ryuchan.haten...
--[[- その2 - ( フィルタ選択されたインデックス ):http://r...
--[[- その3 - ( パフォーマンスがどれくらい改善される? ):...
--[[- その4 - ( クエリパフォーマンスの結果をメールで送る ...
--[[- その5 - ( クエリプランから不足インデックス情報を取...
--[[- その6 - ( CONVERT_IMPLICIT、暗黙の型変換の怖さを知...
--[[- その7 - ( プランキャッシュの状態を確認する ):http:/...
--[[- その8 - ( 未使用なインデックスを抽出してみる ):http...
--[[- その9 - ( TempDB の動きも気にしてみる ):http://ryuc...
--[[- その10 - ( 実行プランの StatementText の中に、調査...
--[[- その11 - ( dm_exec_query_optimizer_info でチューニ...
--[[- その12 - ( SQL Server のメモリ関係で必要なカウンタ...
--[[- その13 - ( その 12 の補足 ):http://ryuchan.hatenabl...
--[[- その14 - ( 少しでもオーバーヘッドを少なくしてみる )...
--[[- その15 - ( 無駄なキャッシュプランを探してみる ):htt...
--[[- その16 - ( BCP とか、一括系の操作を高速化してみる )...
--[[- その16の補足 - ( TABLOCK の動作を確認してみる ):htt...
--[[- その17 - ( FOR XML PATH の連結をもう少し高速化して...
--[[- その18 - ( とあるプロジェクト向けメモ ):http://ryuc...
--[[- その19 - ( プランがちゃんと再利用されているか確認し...
--[[- その20 - ( きちんとパラメータ化してみる ):http://ry...
--[[- その21 - ( あるプロジェクト向けに書いてみた ):http:...
--[[- その 22 - ( これだけ分かっていればいいと思われる記...
--[[統計情報を更新すると、『 クエリはリコンパイルされるよ...
--[[インデックスの統計内容について参照してみる:http://ryu...
--[[こんな時、RECOMPILE したほうがいいよねと思って記事書...
--[[データベースファイルが格納されているドライブの残容量...
--[[設定の内容とか、ログの使用量とかのデータベースの状態...
-SQL Server の構造について記事にしてみる
--[[- その1 (インデックスの基礎知識) -:http://ryuchan.hat...
--[[- その2 ( 前回の 『 インデックスの基礎知識 』 を実際...
--[[- その3 ( インデックスの構造を深堀してみる ) -:http:/...
--[[今更ながら..... SQL Server の構造に関して触れてみる -...
**[[SQL Serverトラブルシューティング:http://www.atmarkit....
-[[「あるタイミングから」処理が遅くなり、再起動しても再現...
-[[原因不明の処理遅延が「不定期」に発生する(パフォーマン...
**その他 [#e0c4111b]
-[[パフォーマンスの監視とチューニング:https://docs.micros...
-[[SQL Server性能問題の3大要因 システムリソース/クエリ/待...
-[[SQL Serverのパフォーマンスを 最適化するための10のヒン...
-[[SQL Server のクエリチューニングの参考情報:http://blog....
-[[SQLチューニング: ソートを発生させないインデックス設計:...
-[[Microsoft SQL Server パフォーマンスチューニング方法:ht...
-[[Sql server エンジニアに知ってもらいたい!! sql server ...
-[[Sql server これだけはやっておこう 最終版:https://www.s...
*タイムアウト [#f9b22d69]
-[[ASP.NET で SQLのコマンドがタイムアウトした場合の対応方...
-[[SQL Serverに.NETで接続しようとすると1.2秒でタイムアウ...
終了行:
-[[SQL Server で最低限設定が必要な内容:https://qiita.com/...
-[[Dr. K's SQL Serverチューニング研修:http://www.atmarkit...
-[[真・Dr. K's SQL Serverチューニング研修:http://www.atma...
-[[Run Best Practices Analyzer Scans and Manage Scan Resu...
-[[SQL Server の再生のマークアップ言語 (RML) ユーティリテ...
-[[SQLパフォーマンスtips(SQLServer):https://qiita.com/kaz...
-[[インデックスと実行計画を理解する@SQLServer:https://qii...
-[[ZOZOTOWNの冬セール負荷対策で実施したDBサーバーのCPUボ...
*SQL Server チューニングのポイント [#qbcbf991]
-[[SQL Server のチューニングについてまとめてみる - その 2...
**トランザクション分離レベル [#s786a867]
-[[【SQL server】トランザクション分離レベルについて:https...
-[[【解決方法】SQL Serverデフォルト設定(READ COMMITTED SN...
-[[DBMSのロック・分離戦略と同時実行制御:https://techinfoo...
-SQL Server では READ_COMMITTED_SNAPSHOT がデフォルトで OFF
--オーバーヘッドが大きくなることなどが理由か
-※ SQL Azure では、READ_COMMITTED_SNAPSHOT がデフォルトで...
-分離レベルのデフォルト値は READ COMMITTED が設定されている
-SQL Server の READ COMMITTED は、、select for update の...
-Oracle の READ COMMITTED (他で未コミットのレコードは変...
ALTER DATABASE [Database Name]
SET READ_COMMITTED_SNAPSHOT ON;
-MVCC(READ_COMMITTED_SNAPSHOTをON)にすると同時実行性が高...
**インデックス不足解消 [#md3eb931]
**ロックの最小化 [#hab0be24]
**暗黙の型変換の抑制 [#b417c5d8]
-[[SQL Server のチューニングについてまとめてみる - その6 ...
-条件に指定するカラムに対し、違う型の値で条件を指定すると...
-Index Scan が発生することでパフォーマンスが落ちる
-Index Scan を発生させないためには、暗黙の型変換を発生さ...
--例:nvarchar の列に対して、正しい型で条件を指定
---×:WHERE NationalIDNumber = 295847284
---○:WHERE NationalIDNumber = N'295847284'
**コンパイル回数の低減 [#e3cd4cbd]
*SQL Server Management Studio [#t415538b]
*動的管理ビュー [#y057955f]
-[[動的管理ビューおよび関数 (Transact-SQL):https://msdn.m...
-[[SQLServer: 知ってると便利なDMV(動的管理ビュー)まとめ:h...
-SQL Server のチューニングには、dm_* で始まる動的管理ビュ...
**主要テーブル [#r3a17faf]
-sys.dm_db_missing_index_group_stats ... 欠落インデックス...
-sys.dm_db_missing_index_groups ... sys.dm_db_missing_ind...
-sys.dm_db_missing_index_details ... 欠落したインデックス...
*インデックスの調査 [#f1d975b8]
-[[インデックスの統計内容について参照してみる:http://ryuc...
**インデックス不足数の調査 [#l9a9373a]
SELECT DB_NAME(database_id) as [データベース名],
count(*) as [期待しているインデックスが存在しない...
FROM sys.dm_db_missing_index_details
GROUP BY DB_NAME(database_id)
**インデックスを作成した場合のパフォーマンス改善率 [#h40b...
USE [データベース名]
SELECT gs.avg_user_impact AS [予測されるクエリパフォーマ...
gs.last_user_seek AS [最後にシークした時間],
id.statement AS [テーブル名] ,
id.equality_columns AS [等値述語に使用できる列],
id.inequality_columns AS [不等値述語に使用できる...
id.included_columns AS [包括列として必要な列],
gs.unique_compiles AS [コンパイルおよび再コンパイ...
gs.user_seeks AS [クエリによって発生したシーク数]
FROM sys.dm_db_missing_index_group_stats AS gs
INNER JOIN sys.dm_db_missing_index_groups AS ig
ON gs.group_handle = ig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS id
ON ig.index_handle = id.index_handle
WHERE id.[database_id] =DB_ID() Order By gs.last_user_s...
**インデックス統計情報の参照 [#ecb329c9]
SELECT [テーブル名] = t.name,
[統計名] = s.name,
[統計の自動作成] = s.auto_created,
[NORECOMPUTEオプション] = s.no_recompute,
[フィルター定義] = s.has_filter,
[フィルター定義] = s.filter_definition,
[行数] = sp.rows,
[フィルター化されていない行数] = sp.unfiltered_ro...
[ステップ数] = sp.steps,
[サンプリング行数] = sp.rows_sampled,
[統計情報最終更新日] = sp.last_updated
FROM sys.tables AS t
INNER JOIN sys.stats AS s
ON s.object_id = t.object_id
CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.st...
ORDER BY t.name OPTION (RECOMPILE);
*コネクション数の調査 [#i1a555ae]
-[[「.NET」と「ASP.NET」からのSQL Serverへのコネクション...
-接続元ホスト毎のコネクション数を確認
select hostname,count(*) from master..sysprocesses where...
-(接続元ホスト, プログラム名, ステータス)毎のコネクショ...
select hostname,proguram_name,status,count(*) from maste...
-生データの確認
select * from master..sysprocesses where hostname!='';
*クエリの調査 [#v00001be]
**ステートメントのプロファイル情報確認 [#k0fd5efc]
-SET STATISTICS PROFILE ON
--SQL文の前にこれを付けて実行すると、ステートメントのプロ...
**クエリパフォーマンスの調査 [#h6bc5ac4]
SELECT [平均実行時間(msec)] = total_elapsed_time / execu...
[平均CPU時間(msec)] = total_worker_time / executi...
[平均物理I/O数] = total_physical_reads / executio...
[平均論理I/O数] = (total_logical_reads + total_lo...
[SQL文] = SUBSTRING(est.text, (statement_start_of...
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(est.text)
ELSE statement_end_offset
END - statement_start_offset) / 2) + 1)
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS est
*実行プランの調査 [#r857e6a6]
-[[SQL Server のチューニングについてまとめてみる - その7 ...
-[[SQL Server のチューニングについてまとめてみる - その19...
*パフォーマンス低下の防止策 [#n84ac3a1]
**トランザクションログの自動拡張の増分調整 [#w07baf6e]
-[[トランザクション ログ ファイルのサイズの管理:https://d...
*データベースの状態調査 [#u14c8726]
-[[設定の内容とか、ログの使用量とかのデータベースの状態を...
*問題 [#qf3554f8]
**クエリパフォーマンスの低下 [#af18d1ef]
-[[どうする? SQL Server のクエリ パフォーマンスが低下し...
*パフォーマンス改善の施策 [#rb7b58c2]
**統計情報の更新 [#h1a138ce]
-テーブル単位の更新
UPDATE STATISTICS テーブル名;
-データベース全体
EXEC sp_updatestats;
**実行プランの再生成 [#y2ff3abe]
-インスタンス単位
DBCC FREEPROCCACHE;
**インデックス再構築 [#h554e3a6]
-インデックス指定
ALTER INDEX <インデックス名> ON <テーブル名> REBUILD;
-テーブルに関連する全てのインデックス
ALTER INDEX ALL ON <テーブル名> REBUILD;
*参考URL [#xa3f9034]
**[[都内で働くSEの技術的なひとりごと:http://ryuchan.haten...
大変勉強になります。
-SQL Server のチューニングについてまとめてみる
--[[- その1 - ( インデックスの調査 ):http://ryuchan.haten...
--[[- その2 - ( フィルタ選択されたインデックス ):http://r...
--[[- その3 - ( パフォーマンスがどれくらい改善される? ):...
--[[- その4 - ( クエリパフォーマンスの結果をメールで送る ...
--[[- その5 - ( クエリプランから不足インデックス情報を取...
--[[- その6 - ( CONVERT_IMPLICIT、暗黙の型変換の怖さを知...
--[[- その7 - ( プランキャッシュの状態を確認する ):http:/...
--[[- その8 - ( 未使用なインデックスを抽出してみる ):http...
--[[- その9 - ( TempDB の動きも気にしてみる ):http://ryuc...
--[[- その10 - ( 実行プランの StatementText の中に、調査...
--[[- その11 - ( dm_exec_query_optimizer_info でチューニ...
--[[- その12 - ( SQL Server のメモリ関係で必要なカウンタ...
--[[- その13 - ( その 12 の補足 ):http://ryuchan.hatenabl...
--[[- その14 - ( 少しでもオーバーヘッドを少なくしてみる )...
--[[- その15 - ( 無駄なキャッシュプランを探してみる ):htt...
--[[- その16 - ( BCP とか、一括系の操作を高速化してみる )...
--[[- その16の補足 - ( TABLOCK の動作を確認してみる ):htt...
--[[- その17 - ( FOR XML PATH の連結をもう少し高速化して...
--[[- その18 - ( とあるプロジェクト向けメモ ):http://ryuc...
--[[- その19 - ( プランがちゃんと再利用されているか確認し...
--[[- その20 - ( きちんとパラメータ化してみる ):http://ry...
--[[- その21 - ( あるプロジェクト向けに書いてみた ):http:...
--[[- その 22 - ( これだけ分かっていればいいと思われる記...
--[[統計情報を更新すると、『 クエリはリコンパイルされるよ...
--[[インデックスの統計内容について参照してみる:http://ryu...
--[[こんな時、RECOMPILE したほうがいいよねと思って記事書...
--[[データベースファイルが格納されているドライブの残容量...
--[[設定の内容とか、ログの使用量とかのデータベースの状態...
-SQL Server の構造について記事にしてみる
--[[- その1 (インデックスの基礎知識) -:http://ryuchan.hat...
--[[- その2 ( 前回の 『 インデックスの基礎知識 』 を実際...
--[[- その3 ( インデックスの構造を深堀してみる ) -:http:/...
--[[今更ながら..... SQL Server の構造に関して触れてみる -...
**[[SQL Serverトラブルシューティング:http://www.atmarkit....
-[[「あるタイミングから」処理が遅くなり、再起動しても再現...
-[[原因不明の処理遅延が「不定期」に発生する(パフォーマン...
**その他 [#e0c4111b]
-[[パフォーマンスの監視とチューニング:https://docs.micros...
-[[SQL Server性能問題の3大要因 システムリソース/クエリ/待...
-[[SQL Serverのパフォーマンスを 最適化するための10のヒン...
-[[SQL Server のクエリチューニングの参考情報:http://blog....
-[[SQLチューニング: ソートを発生させないインデックス設計:...
-[[Microsoft SQL Server パフォーマンスチューニング方法:ht...
-[[Sql server エンジニアに知ってもらいたい!! sql server ...
-[[Sql server これだけはやっておこう 最終版:https://www.s...
*タイムアウト [#f9b22d69]
-[[ASP.NET で SQLのコマンドがタイムアウトした場合の対応方...
-[[SQL Serverに.NETで接続しようとすると1.2秒でタイムアウ...
ページ名: