転載アドレスします。https://www.cnblogs.com/tianqing/p/11152799.html
今日のオンラインCPUのSQLServerデータベースは、緊急事態に、オフフック鳴っている、それは、接続プロファイルを遮断するデータベースを分析し、最もCPUに負荷をかけTOP10 SQL、並列処理の設定、SQLクエリの理由の再コンパイルのSQLクエリ度など
我々はいくつかの一般的なSQLをコンパイル
1.クエリデータベースのブロック
1
|
SELECT
*
FROM
sys.sysprocesses
WHERE
blocked<>0
|
クエリ結果は、まずサイクル閉塞ルートSIDの根本原因を特定するために、ほとんどのSIDを見つける、この列ブロックされたフォーカスを参照してください
SQLクエリセッションの根本的な原因をブロック
1
|
DBCC Inputbuffer(sid)
|
2.クエリのSQL接続の配布
1
|
SELECT
Hostname
FROM
sys.sysprocesses
WHERE
hostname<>
''
|
接続見る「TestDB2」データベースに接続している1、
MASTER.DBO.SYSPROCESSESから選択* ここでDBID = DB_ID( 'TestDB2')
*データベースのユーザー接続を照会
sp_whoの 'SA'
図2は、データベースが最大接続を可能に表示します
@@ MAX_CONNECTIONSを選択
接続の最後の開始以来、3ビューデータベース
SELECT @@ CONNECTIONS
図4に示すように、接続を閉じます
上記のクエリは、SPIDすることができ、SPIDに従って、プロセスをシャットダウンします。
54を殺します
3.クエリのSQLのTop10最もCPU集約型
1
2
3
|
select
top
(10) st.text
as
Query, qs.total_worker_time, qs.execution_count
from
sys.dm_exec_query_stats
as
qs
CROSS
Apply sys.dm_exec_sql_text(qs.sql_handle)
AS
st
order
by
qs.total_worker_time
desc
|
4.参照の並列処理のSQLServer
1
|
SELECT
value_in_use
FROM
sys.configurations
WHERE
name
=
'max degree of parallelism'
|
並列度は、並列プランの生成を抑制するために、1に設定されている場合は、並列処理の最大限度を1に設定します
並列コンパイラは1にSQLの実行計画、並列処理の最大の度合いを生成し、防ぐことができます
:ポリシーを設定し、具体的な設定方法は、以下を参照してください。https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-max-degree-of-parallelism-server-configuration-オプション?ビュー= SQL-サーバ- 2017
1
2
3
4
5
6
7
8
9
10
|
USE DatabaseName ;
GO
EXEC
sp_configure
'show advanced options'
, 1;
GO
RECONFIGURE
WITH
OVERRIDE;
GO
EXEC
sp_configure
'max degree of parallelism'
, 16;
GO
RECONFIGURE
WITH
OVERRIDE;
GO
|
5.查询SQL Serverの再コンパイルの理由
1
2
|
select
dxmv.
name
, dxmv.map_key,dxmv.map_value
from
sys.dm_xe_map_values
as
dxmv
where
dxmv.
name
=
'statement_recompile_cause'
order
by
dxmv.map_key
|
テーブルへ6. SQLトレースファイル、実行する集計分析(CPU、IO、実行時間など)
1
2
3
|
SELECT
*
INTO
TabSQL
FROM
fn_trace_gettable(
'C:\Users\***\Desktop\Trace\sql05trace20180606-业务.trc'
,
default
);
GO
|
上記の表のデータ分析を重合最も時間のかかるSQL
1
2
3
4
5
6
7
8
9
10
11
12
|
select
top
100
replace
(
replace
(
replace
(
substring
(Textdata,1,6600) ,
char
(10),
' '
),
char
(13),
' '
) ,
char
(9),
' '
)
as
'名称'
,
--substring(Textdata,1,6600) as old,
count
(*)
as
'数量'
,
sum
(duration/1000)
as
'总执行时间ms'
,
avg
(duration/1000)
as
'平均执行时间ms'
,
avg
(cpu)
as
'平均CPU时间ms'
,
avg
(reads)
as
'平均读次数'
,
avg
(writes)
as
'平均写次数'
, LoginName
from
TabSQL t
group
by
replace
(
replace
(
replace
(
substring
(Textdata,1,6600) ,
char
(10),
' '
),
char
(13),
' '
) ,
char
(9),
' '
) , LoginName
order
by
sum
(duration)
desc
|
IO SQLの消費のほとんどは
1
2
3
4
5
6
7
8
9
10
11
12
|
select
TOP
100
replace
(
replace
(
replace
(
substring
(Textdata,1,6600) ,
char
(10),
' '
),
char
(13),
' '
) ,
char
(9),
' '
)
as
'名称'
,LoginName,
count
(*)
as
'数量'
,
sum
(duration/1000)
as
'总执行时间ms'
,
avg
(duration/1000)
as
'平均执行时间ms'
,
sum
(cpu)
as
'总CPU时间ms'
,
avg
(cpu)
as
'平均CPU时间ms'
,
sum
(reads)
as
'总读次数'
,
avg
(reads)
as
'平均读次数'
,
avg
(writes)
as
'平均写次数'
from
TabSQL
group
by
replace
(
replace
(
replace
(
substring
(Textdata,1,6600) ,
char
(10),
' '
),
char
(13),
' '
) ,
char
(9),
' '
) ,LoginName
order
by
sum
(reads)
desc
|
最もCPU集中型SQL
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
TOP
100
replace
(
replace
(
replace
(
substring
(Textdata,1,6600) ,
char
(10),
' '
),
char
(13),
' '
) ,
char
(9),
' '
)
as
'名称'
,LoginName,
count
(*)
as
'数量'
,
sum
(duration/1000)
as
'总执行时间ms'
,
avg
(duration/1000)
as
'平均执行时间ms'
,
sum
(cpu)
as
'总CPU时间'
,
avg
(cpu)
as
'平均CPU时间'
,
avg
(reads)
as
'平均读次数'
,
avg
(writes)
as
'平均写次数'
from
TabSQL
group
by
replace
(
replace
(
replace
(
substring
(Textdata,1,6600) ,
char
(10),
' '
),
char
(13),
' '
) ,
char
(9),
' '
) ,LoginName
order
by
avg
(cpu)
desc
|