日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

第七章——DMVs和DMFs(1)

發(fā)布時(shí)間:2025/4/9 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第七章——DMVs和DMFs(1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第七章——DMVs和DMFs(1) 原文: 第七章——DMVs和DMFs(1)

簡(jiǎn)介:

??????? 從SQLServer2005開(kāi)始,微軟引入了一個(gè)名叫DMO(動(dòng)態(tài)管理對(duì)象)的新特性,DMO可以分為DMFsDynamic Manage Functions,動(dòng)態(tài)管理函數(shù))和DMVsDynamic Manage Views,動(dòng)態(tài)管理視圖)兩部分。這些函數(shù)和視圖用于查找SQLServer實(shí)例內(nèi)部統(tǒng)計(jì)信息以供性能監(jiān)控所用。它們提供實(shí)時(shí)的,關(guān)于SQLServer內(nèi)部工作的,能用于性能分析和性能故障排除的各種統(tǒng)計(jì)信息。

??????? 所有的DMO都屬于sys架構(gòu),并且以dm_開(kāi)頭。執(zhí)行DMO需要有VIEW SERVER STATEVIEW DATABASE STATE權(quán)限。

?

下面簡(jiǎn)述一下本系列將要介紹的DMO

?

?? 執(zhí)行相關(guān)的DMOsys.dm_exec_*):提供與執(zhí)行相關(guān)的統(tǒng)計(jì)信息。可以用于監(jiān)控與緩存查詢、執(zhí)行計(jì)劃、活動(dòng)連接/會(huì)話和帶有執(zhí)行計(jì)劃的當(dāng)前運(yùn)行的查詢的相關(guān)統(tǒng)計(jì)信息。

?? 索引相關(guān)的DMOsys.dm_db_index_*sys.dm_db_missing_*):提供關(guān)于索引的統(tǒng)計(jì)信息。這些DMO可以用于監(jiān)控和分析因?yàn)閬G失索引、無(wú)效索引而導(dǎo)致的性能問(wèn)題,也可以用來(lái)檢查索引的使用情況。

?? 數(shù)據(jù)庫(kù)相關(guān)DMOsys.dm_db_*):提供數(shù)據(jù)庫(kù)相關(guān)統(tǒng)計(jì)信息。可以用于監(jiān)控和分析數(shù)據(jù)庫(kù)的性能問(wèn)題,分析數(shù)據(jù)庫(kù)相關(guān)文件的統(tǒng)計(jì)信息、會(huì)話統(tǒng)計(jì)信息和任務(wù)統(tǒng)計(jì)信息。

?? I/O相關(guān)DMOsys.dm_io_*):提供I/O操作的統(tǒng)計(jì)信息,用于監(jiān)控和分析SQLServerI/O性能問(wèn)題。

?? OS相關(guān)DMOsys.dm_os_*):提供關(guān)于sqlos內(nèi)部統(tǒng)計(jì)信息,用于監(jiān)控和分析服務(wù)器配置問(wèn)題。

?? 事務(wù)相關(guān)的DMOsys.dm_trn_*):提供事務(wù)相關(guān)的統(tǒng)計(jì)信息,用于監(jiān)控和分析長(zhǎng)時(shí)間運(yùn)行的事務(wù)的鎖定、死鎖問(wèn)題。

?

這些DMO的數(shù)據(jù)可以通過(guò)DBCC SQLPERF(‘SYS.DM_OS_WAIT_STATS’,CLEAR)或者重啟服務(wù)器來(lái)重置。

?

?

監(jiān)控當(dāng)前查詢執(zhí)行的統(tǒng)計(jì)信息:

??????? 為了使得服務(wù)器上的查詢足夠的好,需要識(shí)別那些消耗資源的查詢和找到這些資源的來(lái)源。為了實(shí)現(xiàn)這些功能,需要監(jiān)控查詢的請(qǐng)求和檢查它們的運(yùn)行時(shí)間、IO操作等等。

??????? SQLServer有專用的DMO來(lái)監(jiān)控查詢的執(zhí)行信息,這些DMO包含廣泛的信息,以sys.dm_exec_開(kāi)頭。通過(guò)這些DMO可以快速發(fā)現(xiàn)問(wèn)題查詢,從而進(jìn)行優(yōu)化。

??????? 本文將演示使用DMO來(lái)獲取當(dāng)前正在請(qǐng)求SQLServer查詢的信息,并找到長(zhǎng)時(shí)間運(yùn)行的查詢,同時(shí)可以監(jiān)控當(dāng)前正在運(yùn)行的游標(biāo),這個(gè)通常也會(huì)引起性能問(wèn)題。

?

準(zhǔn)備工作:

??????? 本文中將使用DMO來(lái)監(jiān)控當(dāng)前查詢請(qǐng)求的一些有用信息,如數(shù)據(jù)庫(kù)名、登錄名、程序名、查詢開(kāi)始時(shí)間、讀寫(xiě)數(shù)。

??????? 眾所周知,游標(biāo)是非常消耗資源且影響查詢性能的,如非必要,不建議使用。

??????? 本例中使用SQLServer 2008R2,并在微軟示例數(shù)據(jù)庫(kù)AdventureWorks上操作。

?

步驟:

1、? 打開(kāi)SSMS,連到SQLServer實(shí)例。

2、? 打開(kāi)新查詢窗口,并輸入以下代碼,用于監(jiān)控當(dāng)前查詢:

?

SELECT DB_NAME(R.database_id) AS DatabaseName ,S.original_login_name AS LoginName ,S.host_name AS ClientMachine ,S.program_name AS ApplicationName ,R.start_time AS RequestStartTime ,ST.text AS SQLQuery ,QP.query_plan AS ExecutionPlan ,R.cpu_time AS CPUTime ,R.total_elapsed_time AS TotalTimeElapsed ,R.open_transaction_count AS TotalTransactionOpened ,R.reads ,R.logical_reads ,R.writes AS TotalWrites FROM sys.dm_exec_requests AS RINNER JOIN sys.dm_exec_sessions AS S ON R.session_id = S.session_idCROSS APPLY sys.dm_exec_sql_text(R.sql_handle) AS STCROSS APPLY sys.dm_exec_query_plan(R.plan_handle) AS QP ORDER BY TotalTimeElapsed DESC GO


?

?

3、? 打開(kāi)新窗口輸入一下腳本,用于監(jiān)控當(dāng)前打開(kāi)的游標(biāo):

?

SELECT S.host_name AS ClientMachine ,S.program_name AS ApplicationName ,S.original_login_name AS LoginName ,C.name AS CursorName ,C.properties AS CursorOptions ,C.creation_time AS CursorCreatinTime ,ST.text AS SQLQuery ,C.is_open AS IsCursorOpen ,C.worker_time / 1000 AS DurationInMiliSeconds ,C.reads AS NumberOfReads ,C.writes AS NumberOfWrites FROM sys.dm_exec_cursors (0) AS CINNER JOIN sys.dm_exec_sessions AS S ON C.session_id = S.session_idCROSS APPLY sys.dm_exec_sql_text(C.sql_handle) AS ST ORDER BY DurationInMiliSeconds DESC GO


?

?

分析:

在上面步驟中,使用了以下的DMOs

?? Sys.dm_exec_requests

?? Sys.dm_exec_sessions

?? Sys.dm_exec_sql_text

?? Sys.dm_exec_query_plan

?

對(duì)于上面的查詢結(jié)果,需要思考的問(wèn)題:

?? 哪個(gè)庫(kù)正在接受請(qǐng)求?

?? 那個(gè)登錄名執(zhí)行了這個(gè)請(qǐng)求?

?? 請(qǐng)求是從哪個(gè)計(jì)算機(jī)發(fā)出的?

?? 請(qǐng)求是從那個(gè)應(yīng)用程序發(fā)出的?

?? 請(qǐng)求是何時(shí)到達(dá)SQLServer的?

?? 請(qǐng)求中需要執(zhí)行什么SQL語(yǔ)句?

?? 執(zhí)行的SQL語(yǔ)句的執(zhí)行計(jì)劃是什么?

?? 請(qǐng)求的持續(xù)時(shí)間有多少?

?? 請(qǐng)求是否開(kāi)啟了事務(wù)?

?? 請(qǐng)求造成的讀寫(xiě)數(shù)是多少?

?? 請(qǐng)求是否被阻塞了?如果是,是哪個(gè)會(huì)話造成的?

?

??????? 為了找到這些信息,需要把sys.dm_exec_requestssys.dm_exec_sessionssession_id列關(guān)聯(lián)。

同時(shí),使用CROSS APPLY來(lái)關(guān)聯(lián)sys.dm_exec_sql_text()函數(shù)來(lái)查找請(qǐng)求的SQL文本。關(guān)聯(lián)sys.dm_exec_query_plan()函數(shù)來(lái)查找請(qǐng)求的執(zhí)行計(jì)劃。這兩個(gè)函數(shù)需要從查詢中分別獲得sql_handleplan_handle。在結(jié)果集中,按TotalTimeElapsed列排序,可以知道最耗資源的查詢。

?

??????? 第二個(gè)查詢中使用了sys.dm_exec_cursors()函數(shù)來(lái)返回當(dāng)前正在使用的游標(biāo)的詳細(xì)。這個(gè)函數(shù)接受session_id作為參數(shù)。如果傳入了特定session_id,只會(huì)返回該會(huì)話的游標(biāo),如果傳入0,則返回所有會(huì)話的游標(biāo)。結(jié)果集按照DurationInMiliSecondes排序,一邊查找最耗資源的游標(biāo),注意worker_time除以了1000,因?yàn)檫@個(gè)的單位是微妙,除以1000可以得到毫秒。

?

擴(kuò)充知識(shí):

由于這些dmo的解釋較長(zhǎng),詳細(xì)請(qǐng)看聯(lián)機(jī)叢書(shū)。除了上面列出的dmo之外,還有一些與執(zhí)行相關(guān)的dmo,如:

?? Sys.dm_exec_cached_plans(DMV)

?? Sys.dm_exec_procedure_stats(DMV)

?? Sys.dm_exec_query_stats(DMV)

?? Sys.dm_exec_cached_plan_dependent_objects(DMF)

這些DMO提供查詢和對(duì)象的詳細(xì)緩存信息,對(duì)查詢優(yōu)化很有幫助。

posted on 2015-03-06 14:56 NET未來(lái)之路 閱讀(...) 評(píng)論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/4318256.html

總結(jié)

以上是生活随笔為你收集整理的第七章——DMVs和DMFs(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。