Azure SQL Database 使用Query Store對(duì)Azure SQL Database監(jiān)控

來源: 博客園
作者:Lei Zhang
時(shí)間:2020-09-21
17085
我們?cè)谑褂肁zure SQL Database的時(shí)候,需要對(duì)數(shù)據(jù)庫的性能進(jìn)行監(jiān)控,這時(shí)候就可以有兩種方法:1.第一種方法,是通過Azure SQL Database的監(jiān)控界面,來查看數(shù)據(jù)庫的性能,在本章會(huì)簡單的介紹一下2.第二種方法,是通過Query Store來進(jìn)行監(jiān)控,在本章會(huì)詳細(xì)介紹。

我們?cè)谑褂肁zure SQL Database的時(shí)候,需要對(duì)數(shù)據(jù)庫的性能進(jìn)行監(jiān)控,這時(shí)候就可以有兩種方法:

1.第一種方法,是通過Azure SQL Database的監(jiān)控界面,來查看數(shù)據(jù)庫的性能,在本章會(huì)簡單的介紹一下

2.第二種方法,是通過Query Store來進(jìn)行監(jiān)控,在本章會(huì)詳細(xì)介紹

首先,我們介紹一下使用Azure SQL Database的監(jiān)控界面。

1.我們登錄Azure Portal: https://portal.azure.cn/

2.查看到我們使用的Azure SQL Database,選擇概述,然后點(diǎn)擊下圖紅色部分

ia_3200000003.png

3.頁面跳轉(zhuǎn)后,我們可以在下圖的Last Hour,設(shè)置監(jiān)控的時(shí)間段

在Add Metric里面,增加新的監(jiān)控指標(biāo),比如CPU Percentage, Data IO Percentage等

ia_3200000004.png

4.我們還可以在性能概述里面,查看到微軟云Azure對(duì)我們當(dāng)前數(shù)據(jù)的優(yōu)化建議

ia_3200000005.png

接下來,我們?cè)敿?xì)介紹一下使用Query Store來進(jìn)行監(jiān)控,實(shí)際上我們?cè)谏厦婵吹降耐ㄟ^Azure Portal的可視化監(jiān)控,其實(shí)也是通過Query Store來進(jìn)行監(jiān)控的。

Query Store是SQL Server 2016里面新的功能,同時(shí)在微軟云Azure平臺(tái)上,也提供了該功能

Query Store是從內(nèi)存中讀取數(shù)據(jù),并異步寫入到Azure SQL Database的磁盤上的

ia_3200000006.png

這里我們假設(shè)一個(gè)場(chǎng)景,如果Azure SQL Databse的DTU利用率很高,我們?nèi)绾尾樵兂鼍唧w是哪些語句,占用了過多的資源呢?

1.首先,我們通過Azure Portal,查看到問題發(fā)生的時(shí)間,如下圖在9月2日的凌晨開始,發(fā)生了該問題

ia_3200000007.jpg

我們點(diǎn)擊下圖的紅色部分

2.DTU和CPU Time,DataIO都有關(guān)。我們點(diǎn)擊下圖的Add Metric

ia_3200000008.jpg

3.DTU是和CPU Time,Data IO疊加的因素,我們可以看到下面的CPU Time和DataIO都很高,

8點(diǎn)以后都是DATA IO

ia_3200000009.jpg

4.我們?cè)诒镜豍C上安裝SQL Server Management Studio,訪問上面的數(shù)據(jù)庫,并且找到Query Store

我們點(diǎn)擊下圖的Top Resource Consuming Queries

ia_3200000010.jpg

5.點(diǎn)擊上圖右上角的Config,設(shè)置查詢時(shí)間

ia_3200000011.jpg

6.在彈出的窗口中,選擇查詢時(shí)間,我們也可以使用默認(rèn)的

ia_3200000012.jpg

7.我們查詢CPU Time,Static 選擇Avg。可以查看到缺少索引

ia_3200000013.jpg

8.在下圖,我們右鍵Miss Index,設(shè)置索引

ia_3200000014.jpg

9.如果我們需要查詢所有缺少索引的表結(jié)構(gòu),可以在SSMS執(zhí)行下面的語句

--Search Missing Index Directly

SELECT

    SUM(qrs.count_executions) * AVG(qrs.avg_logical_io_reads) as est_logical_reads,

    SUM(qrs.count_executions) AS sum_executions,

    AVG(qrs.avg_logical_io_reads) AS avg_avg_logical_io_reads,

    SUM(qsq.count_compiles) AS sum_compiles,

    (SELECT TOP 1 qsqt.query_sql_text FROM sys.query_store_query_text qsqt

        WHERE qsqt.query_text_id = MAX(qsq.query_text_id)) AS query_text,    

    TRY_CONVERT(XML, (SELECT TOP 1 qsp2.query_plan from sys.query_store_plan qsp2

        WHERE qsp2.query_id=qsq.query_id

        ORDER BY qsp2.plan_id DESC)) AS query_plan,

    qsq.query_id,

    qsq.query_hash

FROM sys.query_store_query qsq

JOIN sys.query_store_plan qsp on qsq.query_id=qsp.query_id

CROSS APPLY (SELECT TRY_CONVERT(XML, qsp.query_plan) AS query_plan_xml) AS qpx

JOIN sys.query_store_runtime_stats qrs on qsp.plan_id = qrs.plan_id

JOIN sys.query_store_runtime_stats_interval qsrsi on qrs.runtime_stats_interval_id=qsrsi.runtime_stats_interval_id

WHERE    

    qsp.query_plan like N'%<MissingIndexes>%'

    and qsrsi.start_time >= DATEADD(HH, -24, SYSDATETIME())

GROUP BY qsq.query_id, qsq.query_hash

ORDER BY est_logical_reads DESC

GO


10.如果我們發(fā)現(xiàn)數(shù)據(jù)庫發(fā)生死鎖,可以嘗試以下語句(master庫)執(zhí)行查看死鎖,更多信息可參考:https://blogs.msdn.microsoft.com/azuresqldbsupport/2017/04/19/deadlock-analysis-for-sql-azure-database/

WITH CTE AS (

       SELECT CAST(event_data AS XML)  AS [target_data_XML] 

   FROM sys.fn_xe_telemetry_blob_target_read_file('dl', null, null, null)

)

SELECT target_data_XML.value('(/event/@timestamp)[1]', 'DateTime2') AS Timestamp,

target_data_XML.query('/event/data[@name=''xml_report'']/value/deadlock') AS deadlock_xml,

target_data_XML.query('/event/data[@name=''database_name'']/value').value('(/value)[1]', 'nvarchar(100)') AS db_name

FROM CTE


11.當(dāng)我們需要手動(dòng)Kill死鎖的Session時(shí)候,需要注意:當(dāng)前執(zhí)行完kill 會(huì)話后,為什么執(zhí)行kill語句完成,但查看會(huì)話進(jìn)程還在?

在執(zhí)行kill殺會(huì)話時(shí)候,命令執(zhí)行完成并不代表會(huì)話即時(shí)被kill掉,會(huì)話中有大事務(wù)操作的話,為保證數(shù)據(jù)的一致性,未提交的事務(wù)首先要做回滾,執(zhí)行回滾時(shí)間的依據(jù)事務(wù)操作的大小。

建議:一般在Kill會(huì)話,建議采用KILL session ID WITH STATUSONLY 方式,這樣我們?cè)趉ill動(dòng)作操作結(jié)束,可以實(shí)時(shí)看到當(dāng)前處理的進(jìn)度百分比。

詳細(xì)介紹可參考:https://docs.microsoft.com/zh-cn/sql/t-sql/language-elements/kill-transact-sql?view=sql-server-2017

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于博客園,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
隨著人工智能技術(shù)持續(xù)重塑企業(yè)運(yùn)營方式,企業(yè)需要能夠處理海量數(shù)據(jù)的系統(tǒng),以支持實(shí)時(shí)洞察,同時(shí)幫助他們應(yīng)對(duì)跨IT和OT環(huán)境(包括云端、邊緣和本地)中運(yùn)營、應(yīng)用、數(shù)據(jù)和基礎(chǔ)設(shè)施的協(xié)作難題。
Azure
微軟云
云服務(wù)
2024-12-172024-12-17
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來
.NET 9現(xiàn)已正式發(fā)布,它為.NET平臺(tái)的發(fā)展掀開了嶄新的一頁,突破了性能、云原生開發(fā)和AI技術(shù)集成的邊界。
Azure
微軟云
云服務(wù)
2024-12-162024-12-16
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
智能Microsoft Copilot副駕駛for Azure網(wǎng)絡(luò)服務(wù)現(xiàn)已推出公共預(yù)覽版。
Azure
微軟云
云服務(wù)
2024-12-102024-12-10
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
一年前,我們正式推出了一款端到端數(shù)據(jù)平臺(tái),旨在幫助組織推動(dòng)人工智能轉(zhuǎn)型,并重新定義數(shù)據(jù)的連接、管理和分析方式。
Azure
微軟云
云服務(wù)
2024-12-092024-12-09
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
個(gè)人VIP
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家