溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何找出你性能最差的SQL Server查詢

發(fā)布時(shí)間:2021-12-21 17:05:14 來(lái)源:億速云 閱讀:165 作者:柒染 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)如何找出你性能最差的SQL Server查詢,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

問(wèn)SQL Server!

SQL Server的一個(gè)優(yōu)點(diǎn)是它本身能回答幾乎所有你的問(wèn)題,因?yàn)镾QL Server在各個(gè)DMV和DMF里存儲(chǔ)了很多故障排除信息。另一方面這也是個(gè)缺點(diǎn),因?yàn)槟惚仨氈栏鱾€(gè)DMV/DMF,還有如何把它們解釋和關(guān)聯(lián)在一起。

至于你的最差性能SQL Server查詢的一個(gè)最重要的DMV是sys.dm_exec_query_stats。對(duì)于每個(gè)緩存的執(zhí)行計(jì)劃,SQL Server存儲(chǔ)了這個(gè)執(zhí)行計(jì)劃在運(yùn)行時(shí)的詳細(xì)信息。另外SQL Server告訴你這個(gè)查詢消耗的CPU時(shí)間和I/O讀取。當(dāng)我對(duì)性能很差的SQL Server進(jìn)行故障排除時(shí),這是我經(jīng)常使用的基本DMV之一。

讓我們進(jìn)入sys.dm_exec_query_stats!

當(dāng)你對(duì)sys.dm_exec_query_stats進(jìn)行一個(gè)簡(jiǎn)單的SELECT查詢,你會(huì)得到有很多不同列的一個(gè)非常廣泛的記錄集——有大量的不同數(shù)字。

我們來(lái)仔細(xì)看下它們。對(duì)于每個(gè)緩存的執(zhí)行計(jì)劃,SQL Server給你下列度量的信息:

  • Worker Time (columns …_工作者時(shí)間)

  • Physical Reads (columns …_物理讀)

  • Logical Writes (columns …_邏輯寫(xiě))

  • Logical Reads (columns …_邏輯讀)

  • SQLCLR Time (columns …_公共語(yǔ)言運(yùn)行時(shí)間)

  • Elapsed Time (columns …_運(yùn)行時(shí)間)

  • Row Count (columns …_行數(shù))

對(duì)于每個(gè)度量,你得到4個(gè)集合信息的不同列:

  • 總值(Total value)

  • 上個(gè)值(Last value)

  • 最小值(Min value)

  • 最大值(Max value)

手上有了這些信息找出你性能最差的查詢是什么。但首先你要知道什么是你的性能瓶頸——CPU還是I/O限制?如果你的性能瓶頸是CPU限制,你可以用下列查詢問(wèn)SQL Server根據(jù)CPU消耗列出前5個(gè)最差性能的查詢:

-- Worst performing CPU bound queries
SELECT TOP 5
st.text,
qp.query_plan,
qs.*
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY total_worker_time DESC
GO

你可以看到這里我使用了簡(jiǎn)單的ORDER BY total_worker_time DESC來(lái)返回CPU密集的查詢。另外也通過(guò)調(diào)用sys.dm_exec_sql_textsys.dm_exec_query_plan DMF來(lái)抓取SQL語(yǔ)句和執(zhí)行計(jì)劃本身。下列代碼顯示如何依據(jù)I/O消耗來(lái)找出你性能最差的查詢。

-- Worst performing I/O bound queries
SELECT TOP 5
st.text,
qp.query_plan,
qs.*
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY total_logical_reads DESC
GO

當(dāng)在你面前有SQL語(yǔ)句和執(zhí)行計(jì)劃時(shí),你可以進(jìn)一步分析查詢找出是什么引起高CPU或I/O消耗。

關(guān)于如何找出你性能最差的SQL Server查詢就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI