日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

第三章——使用系統(tǒng)函數(shù)、存儲過程和DBCC SQLPE

系統(tǒng) 1937 0
原文: 第三章——使用系統(tǒng)函數(shù)、存儲過程和DBCC SQLPERF命令來監(jiān)控SQLServer(1)

忘了說明:本系列文章出自《Microsoft SQL Server 2012 Performance Tuning Cookbook》,將會陸續(xù)推出譯文,但是由于工作需要,沒有按順序貼出來。

本系列文章包含三部分:

1、 ? 使用系統(tǒng)統(tǒng)計(jì)函數(shù)( system statistical functions )來監(jiān)控系統(tǒng)健康程度。

2、 ? 使用系統(tǒng)存儲過程來監(jiān)控 SQLServer 進(jìn)程和會話。

3、 ? 使用 DBCC SQLPERF 命令來監(jiān)控日志空間使用情況。

?

前言:

???????? SQLServer 提供了一些系統(tǒng)函數(shù)、系統(tǒng)存儲過程和 DBCC 命令來分析 SQLServer 性能相關(guān)的問題,不過絕大部分這些工具所獲得的信息都可以通過 DMVs DMFs 來獲得。很多人依舊使用本文的工具的原因是因?yàn)樗麄冮L期使用這些工具來監(jiān)控 SQLServer ,已經(jīng)成為了一個習(xí)慣,所以為了向后兼容,微軟依舊保留這些工具,但是建議新入門的人盡可能從 DMO DMVs DMFs 的統(tǒng)稱)中獲取信息。

?

????? 性能監(jiān)控有很多工具, SQL Profiler 、擴(kuò)展事件、 DMO 及本系列文章提供的工具等,來獲取信息,對于簡單的性能問題,使用某一種即可,但是對于復(fù)雜的性能問題,往往需要多個工具協(xié)同使用。

?

下面先介紹使用系統(tǒng)統(tǒng)計(jì)函數(shù)來監(jiān)控 SQLServer 的健康程度。

?

使用系統(tǒng)統(tǒng)計(jì)函數(shù)來監(jiān)控 SQLServer

?

??????? SQLServer 提供了一些列非常有用的系統(tǒng)統(tǒng)計(jì)函數(shù)來監(jiān)控當(dāng)前 SQLServer 的狀態(tài)。這些函數(shù)用于檢查和監(jiān)控服務(wù)器的健康狀態(tài)非常有效。

?

?????? 現(xiàn)在假設(shè)一個情況,在你的數(shù)據(jù)庫環(huán)境中,一個 web 應(yīng)用程序?qū)?shù)據(jù)集的操作是一行一行的。為了讀取每一行,應(yīng)用程序會在數(shù)據(jù)庫中往返訪問,導(dǎo)致經(jīng)常需要開啟新的連接。為了處理這個問題,需要經(jīng)常監(jiān)控 SQLServer 的連接數(shù),下面將演示如何操作。

?

準(zhǔn)備工作:

?

SQLServer 提供了下面這些有用的系統(tǒng)函數(shù):

?

    @@CONNECTIONS



@@TIMETICKS



@@CPU_BUSY



@@IDLE



@@IO_BUSY



@@PACK_RECEIVED



@@PACK_SENT



@@PACKET_ERRORS



@@TOTAL_READ



@@TOTAL_WRITE



@@TOTAL_ERRORS




  


?

本例子中將使用這些函數(shù),并創(chuàng)建腳本來獲取信息。

?

環(huán)境準(zhǔn)備:

?

使用 SQLServer2008 企業(yè)版(本機(jī)只有企業(yè)版)和示例數(shù)據(jù)庫 AdventureWorks

?

步驟:

?

1、 ? 打開 SQLServer (這里使用 SQLServer Management Studio 后面簡稱 SSMS ),然后新開一個查詢窗口( ctrl+m )。

?

2、 ? 在窗口上輸入一下腳本:

?

    --創(chuàng)建一個表來存儲統(tǒng)計(jì)信息

IF OBJECT_ID('[dbo].[tbl_ServerHealthStatistics]') IS NULL 

    BEGIN

        CREATE TABLE [dbo].[tbl_ServerHealthStatistics]

            (

              ID INT IDENTITY(1, 1) ,

              StatDateTime DATETIME DEFAULT GETDATE() ,

              TotalConnections INT ,

              TimeTicks INT ,

              TotalCPUBusyTime INT ,

              TotalCPUIdleTime INT ,

              TotalIOBusyTime INT ,

              TotalReceivedPackets INT ,

              TotalSentPackets INT ,

              TotalErrorsInNetworkPackets INT ,

              TotalPhysicalReadOperations INT ,

              TotalWriteOperations INT ,

              TotalReadWriteErrors INT

            )

    END

GO 



--收集信息到表中

INSERT  INTO [dbo].[tbl_ServerHealthStatistics]

        ( TotalConnections ,

          TimeTicks ,

          TotalCPUBusyTime ,

          TotalCPUIdleTime ,

          TotalIOBusyTime ,

          TotalReceivedPackets ,

          TotalSentPackets ,

          TotalErrorsInNetworkPackets ,

          TotalPhysicalReadOperations ,

          TotalWriteOperations ,

          TotalReadWriteErrors 

        )

        SELECT  @@CONNECTIONS TotalConnections ,

                @@TIMETICKS TimeTicks ,

                @@CPU_BUSY TotalCPUBusyTime ,

                @@IDLE TotalCPUIdleTime ,

                @@IO_BUSY TotalIOBusyTime ,

                @@PACK_RECEIVED TotalReceivedPackets ,

                @@PACK_SENT TotalSentPackets ,

                @@PACKET_ERRORS TotalErrorsInNetworkPackets ,

                @@TOTAL_READ TotalPhysicalReadOperations ,

                @@TOTAL_WRITE TotalWriteOperations ,

                @@TOTAL_ERRORS TotalReadWriteErrors


  


?

3、運(yùn)行下面腳本,顯示收集的服務(wù)器信息:

?

    WITH    cteStatistics

          AS ( SELECT   *

               FROM     [dbo].[tbl_ServerHealthStatistics]

             )

    SELECT  Cur.TotalConnections AS CurrentConnections ,

            Cur.StatDateTime AS CurrentStatDateTime ,

            Prev.TotalConnections AS PreviousConnections ,

            Prev.StatDateTime AS Previous_StatDateTime ,

            Cur.TotalConnections - Prev.TotalConnections AS ConnectionsIncreamentedBy ,

            DATEDIFF(millisecond, Prev.StatDateTime, Cur.StatDateTime) AS ConnectionsIncreamentedIn

    FROM    cteStatistics AS Cur

            LEFT JOIN cteStatistics AS Prev ON Cur.ID = Prev.ID + 1


  


?

分析:

??????? 上面例子中,先創(chuàng)建一個表 [dbo] . [tbl_ServerHealthStatistics] ,在創(chuàng)建之前,使用 OBJECT_ID() 函數(shù)來檢查是否存在該表,如果存在則不創(chuàng)建,這是一個良好的編程習(xí)慣,建議在創(chuàng)建表(無論是實(shí)體表還是臨時表)時使用。可以確保腳本可重復(fù)執(zhí)行。

?

??????? 步驟 2 的腳本中,通過 INSERT..SELECT 語句來收集數(shù)據(jù)并插入到表中。

?

??????? 步驟 3 中,由于需要對比兩行之間的數(shù)據(jù),所以使用 CTE 2005 之前可以使用臨時表)來暫時存放數(shù)據(jù)然后與目前數(shù)據(jù)做對比。

?

?

擴(kuò)展信息:

?

下面是這些系統(tǒng)統(tǒng)計(jì)函數(shù)的簡介,這些函數(shù)均返回從 SQLServer 啟動以來的匯總值。

?

??????? @@Connections:這個函數(shù)返回SQLServer自啟動以來,嘗試連接到SQLServer的連接數(shù),是一個數(shù)值型結(jié)果。不管這些連接是否成功,均會記錄在里面。

?

????@@MAX_CONNECTIONS:返回允許同時連接的最大連接數(shù),這個數(shù)與使用sp_configure 來配置的Max Connections值相同。也和SQLServer的版本和應(yīng)用程序、硬件的限制有關(guān)。

?

????@@TIMETICKS:返回一個微妙級別的計(jì)數(shù)點(diǎn)。這個值依賴于操作系統(tǒng)的時間系統(tǒng)。通常為31.50毫秒。

?

?????? @@CPU_BUSY :返回自SQLServer服務(wù)啟動以來的工作時間,結(jié)果為所有CPU事件的累計(jì),所以可能會超出實(shí)際時間,乘以@@TIMETICKS即可換成為妙。注意:如果@@CPU_BUSY 或 @@IO_BUSY 中返回的時間超過累積的 CPU 時間約 49 天,則您將收到算術(shù)溢出警告。在這種情況下,@@CPU_BUSY、@@IO_BUSY 和 @@IDLE 變量值并不精確。

?

??? @@IDLE:表示SQLServer空閑時的CPU時間。在多處理器情況下,返回值為所有CPU的匯總。

?

??? @@IO_BUSY:返回SQLServer自啟動以來執(zhí)行輸入輸出操作的CPU總數(shù)。

?

??? @@PACK_RECEIVED:返回SQLServer接收到的網(wǎng)絡(luò)包總數(shù)。

?

??? @@PACK_SENT:返回SQLServer發(fā)送的網(wǎng)絡(luò)報總數(shù)。

?

??? @@PACKET_ERRORS:返回SQLServer所遇到過的網(wǎng)絡(luò)包錯誤的總數(shù)。

?

??? @@TOTAL_READ:返回SQLServer所執(zhí)行過的所有物理讀操作總數(shù)。

?

??? @@TOTAL_WRITE:返回所有物理寫操作的總數(shù)。

?

??? @@TOTAL_ERRORS:返回SQLServer遇到過的所有讀寫操作的錯誤總數(shù)。

?

注意 @@CPU_BUSY @@IDLE @@IO_BUSY 返回的值是基于 ticks 而不是毫秒或者微妙。如果想知道微妙值,可以乘以 @@timeticks

?

??????? 本例中的腳本收集某個時間點(diǎn)的 SQLServer 信息,可以借助 SQLServer Agent ,來定期、自動收集,以便用于后續(xù)分析之用。

?

?????? 另外,sp_monitor系統(tǒng)存儲過程可以返回本例中的信息,但是返回的結(jié)果集比較多,可能需要做二次處理來獲取。

?

第三章——使用系統(tǒng)函數(shù)、存儲過程和DBCC SQLPERF命令來監(jiān)控SQLServer(1)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 普兰店市| 怀安县| 乌拉特中旗| 崇义县| 永昌县| 淮滨县| 罗甸县| 获嘉县| 东平县| 岱山县| 民勤县| 阳山县| 乐安县| 金门县| 丹凤县| 青田县| 合阳县| 潼南县| 巩义市| 柯坪县| 兴山县| 峨眉山市| 通州市| 柳州市| 申扎县| 古田县| 镇远县| 宁夏| 许昌市| 新化县| 偃师市| 乌拉特中旗| 信丰县| 苏尼特左旗| 社旗县| 延庆县| 彝良县| 通许县| 西吉县| 临桂县| 手游|