SMP(Symmetric Multi Processing)
▲
MPP (Massive Parallel Processing)
MPP則 是邏輯上将整個系統劃分為多個節點,每個節點的處理器隻可以通路本身的本地資源,是完全無共享的架構。節點之間的資料交換需要軟體實施。它的優點是可擴充 性非常好;缺點是彼此資料交換困難,需要控制軟體的大量工作來實作通訊以及任務的配置設定、排程,對于一般的企業應用而言過于複雜,效率不高。
NUMA(Non-Uniform Memory Access)
NUMA架構則在某種意義上是綜合了SMP和MPP的特點:邏輯上整個系統也是分為多個節點,每個節點可以通路本地記憶體資源,也可以通路遠端記憶體資源, 但通路本地記憶體資源遠遠快于遠端記憶體資源。它的優點是兼顧了SMP和MPP的特點, 易于管理,可擴充性好;缺點是通路遠端記憶體資源的所需時間非常的大。
不過目前世界上排名靠前的大型機都是基于MPP架構的,AMD最早支援NUMA架構,而盡管Intel一直是SMP的支援者,但從Xeon處理器和酷睿i7開始也逐漸走向了NUMA架構之路。
SQL Server從2000版本的SP4起開始增加了對NUMA的支援,從2005版本起得到了全面的采用;SQL Server2008 R2版本起夜增加了對MPP架構的支援;不過從目前SQL Server的情況來看,主要是支援SMP和NUMA兩種架構。
<b>Windows性能監控</b>
使用管理工具中的“性能”管理工具可以自動從本地或遠端計算機收集性能資料。可以使用“系統螢幕”檢視記錄的計算機資料,也可以将資料導出到電子表格程式或資料庫進行分析并生成報告。該工具類似于linux下的top,iostat,vmstat等監控指令。
<b>SQL Server性能監控</b>
SQL Server内部監控對象及其計數器可以通過性能工具進行收集和評估,但從SQL Server2005之後提供了一個叫sys.dm_os_performance_counters的系統視圖,這個視圖傳回的資訊列舉與SQL Server直接相關的性能統計。
下面語句可以統計出SQL Server所有的監控對象和計數器情況。
SELECT object_name,COUNT(DISTINCT counter_name)
FROM sys.dm_os_performance_counters
GROUP BY object_name
ORDER BY object_name
在本機中共計27中SQLServer對象和334個計數器,其中加粗部分字型為最常關注的對象。
以下是對象類别、計數器數量和對象描述。
MSSQL$MYSQLSERVER:Access Methods 43 搜尋并測量 SQL Server 資料庫對象的配置設定(例如,索引搜尋數或配置設定給索引和資料的頁數)。
MSSQL$MYSQLSERVER:Broker Activation 6 提供有關已激活 Service Broker 的任務的資訊。
MSSQL$MYSQLSERVER:Broker Statistics 37 提供 Service Broker 的正常資訊。
MSSQL$MYSQLSERVER:Broker TO Statistics 9
MSSQL$MYSQLSERVER:Broker/DBM Transport 34 提供有關Service Broker網絡的資訊。
MSSQL$MYSQLSERVER:Buffer Node 9 提供有關SQL Server請求和通路可用頁的頻率的資訊。
MSSQL$MYSQLSERVER:Buffer Partition 3 提供有關SQL Server請求和通路可用頁的頻率的資訊。
MSSQL$MYSQLSERVER:Catalog Metadata 4
MSSQL$MYSQLSERVER:CLR 1 提供有關公共語言運作時 (CLR) 的資訊。
MSSQL$MYSQLSERVER:Cursor Manager by Type 9 提供遊标資訊。
MSSQL$MYSQLSERVER:Cursor Manager Total 3 提供遊标資訊。
MSSQL$MYSQLSERVER:Databases 26 提供有關 SQL Server 資料庫的資訊,如可用的日志空間數量或資料庫中活動事務數。這個對象可有多個執行個體。
MSSQL$MYSQLSERVER:Deprecated Features 1 對使用不推薦使用的功能的次數進行計數。
MSSQL$MYSQLSERVER:Exec Statistics 4 提供了有關執行統計資訊的資訊。
MSSQL$MYSQLSERVER:Latches 7 提供有關加在 SQL Server 所用的内部資源(如資料庫頁)上的闩鎖的資訊。
MSSQL$MYSQLSERVER:Locks 8 提供有關 SQL Server 的單個鎖請求的資訊,如鎖逾時和死鎖。這個對象可有多個執行個體。
MSSQL$MYSQLSERVER:Memory Manager 14 提供有關 SQL Server 記憶體的使用資訊,如目前配置設定的鎖結構總數。
MSSQL$MYSQLSERVER:Plan Cache 5 提供有關 SQL Server 高速緩存的資訊,該高速緩存用于存儲如存儲過程、觸發器和查詢計劃這樣的對象。
MSSQL$MYSQLSERVER:Resource Pool Stats 15 提供了有關資源調控器資源池統計的資訊。
MSSQL$MYSQLSERVER:SQL Errors 1 提供有關 SQL Server 錯誤的資訊。
MSSQL$MYSQLSERVER:SQL Statistics 11 提供有關 SQL查詢各個方面的資訊,如 SQL Server 收到的 Transact-SQL 語句的批數。
MSSQL$MYSQLSERVER:Transactions 14 提供了有關 SQL Server 中活動事務的資訊,如事務總數和快照事務數。
MSSQL$MYSQLSERVER:User Settable 1 執行自定義監視。每個計數器可以是一個自定義的存儲過程或任何傳回一個被監視值的Transact-SQL語句。
MSSQL$MYSQLSERVER:Wait Statistics 12 提供有關等待的資訊。
MSSQL$MYSQLSERVER:Workload Group Stats 12 提供了有關資源調控器工作負荷組統計的資訊。
下面語句。
SELECT top 25
qt.text,
qs.plan_generation_num,
qs.execution_count,
dbid,
objectid
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(sql_handle) as qt
WHERE plan_generation_num >1
ORDER BY qs.plan_generation_num
SQL Server中,我們也可以确定平均或累計占用CPU時間最多的查詢,SQL Server優化器是基于成本的,通過該查詢語句的定位,再進一步分析,是統計資訊問題還是索引和連接配接難題。
SELECT top 50
qt.text AS SQL_text ,
SUM(qs.total_worker_time) AS total_cpu_time,
SUM(qs.execution_count) AS total_execution_count,
SUM(qs.total_worker_time)/SUM(qs.execution_count) AS avg_cpu_time,
COUNT(*) AS number_of_statements
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
GROUP BY qt.text
ORDER BY total_cpu_time DESC --統計總的CPU時間
--ORDER BY avg_cpu_time DESC --統計平均單次查詢CPU時間
以下為SQL Server 2008關于CPU的一些系統視圖。
dm_os_nodes提供了一個名為 SQL OS 的内部元件可建立模拟硬體處理器位置的節點結構。
dm_os_schedulers 對于 SQL Server(每個計劃程式都映射到其中的單個處理器)中的每個計劃程式,相應地傳回一行。使用此視圖可以監視計劃程式的情況或辨別失控任務
dm_os_workers 則對于系統中的每個工作線程,相應地傳回一行。
dm_os_threads 對于系統中的所有SQLOS工作線程,相應地傳回一行。
sys.dm_os_tasks 為 SQL Server 執行個體中的每個活動任務傳回一行。
計算可運作狀态下的工作程序數量,來觀察CPU壓力
SELECT COUNT(*) as workers_waiting_for_cpu,s.scheduler_id
FROM sys.dm_os_workers AS o
INNER JOIN sys.dm_os_schedulers AS s
ON o.scheduler_address=s.scheduler_address
AND s.scheduler_id<255
WHERE o.state='RUNNABLE'
GROUP BY s.scheduler_id
SELECT STasks.session_id, SThreads.os_thread_id
FROM sys.dm_os_tasks AS STasks
INNER JOIN sys.dm_os_threads AS SThreads
ON STasks.worker_address = SThreads.worker_address
WHERE STasks.session_id IS NOT NULL
ORDER BY STasks.session_id;
本文轉自baoqiangwang51CTO部落格,原文連結:http://blog.51cto.com/baoqiangwang/512118,如需轉載請自行聯系原作者