Kiểm tra SQL Server bằng Windows PowerShell - Phần 7

Bước 1

Đánh hoặc copy và paste đoạn mã dưới đây vào file

C:\CheckSQLServer\Checktopqueries.ps1.

function checktopqueries(

[string] $servername

)

{

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$DataSet = New-Object System.Data.DataSet

$SqlConnection.ConnectionString =

"Server=$servername;Database=master;Integrated Security=True"

pdf12 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 2410 | Lượt tải: 1download
Tóm tắt nội dung Kiểm tra SQL Server bằng Windows PowerShell - Phần 7, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Kiểm tra SQL Server bằng 
Windows PowerShell – Phần 7 
 Trong phần sáu chúng tôi đã giới thiệu cho các bạn cách kiểm tra trạng thái cơ sở dữ 
liệu các thông tin về kích thước của cơ sở dữ liệu, còn trong phần này chúng tôi sẽ giới 
thiệu cho các bạn về cách lấy được các thông tin đó trên TOP 10 các truy vấn dựa trên 
hiệu suất CPU. 
Bước 1 
Đánh hoặc copy và paste đoạn mã dưới đây vào file 
C:\CheckSQLServer\Checktopqueries.ps1. 
function checktopqueries( 
[string] $servername 
) 
{ 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$DataSet = New-Object System.Data.DataSet 
$SqlConnection.ConnectionString = 
"Server=$servername;Database=master;Integrated Security=True" 
$SqlCmd.CommandText = " 
If LEFT(convert(varchar(100), 
SERVERPROPERTY('productversion')),1) in ('9','1') 
begin 
select Top 10 case when sql_handle IS NULL 
then ' ' 
else ( substring(st.text,(qs.statement_start_offset+2)/2, 
(case when qs.statement_end_offset = -1 
then len(convert(nvarchar(MAX),st.text))*2 
else qs.statement_end_offset 
end - qs.statement_start_offset) /2 ) ) 
end as query_text 
,creation_time, last_execution_time 
,rank() over(order by (total_worker_time+0.0)/ 
execution_count desc, 
sql_handle,statement_start_offset ) as row_no 
, (rank() over(order by (total_worker_time+0.0)/ 
execution_count desc, 
sql_handle,statement_start_offset ))%2 as l1 
, (total_worker_time+0.0)/1000 as total_worker_time 
, (total_worker_time+0.0)/(execution_count*1000) 
as [AvgCPUTime] 
, total_logical_reads as [LogicalReads] 
, total_logical_writes as [LogicalWrites] 
, execution_count 
, total_logical_reads+total_logical_writes as [AggIO] 
, (total_logical_reads+total_logical_writes)/ 
(execution_count+0.0) as [AvgIO] 
, db_name(st.dbid) as db_name 
, st.objectid as object_id 
from sys.dm_exec_query_stats qs 
cross apply sys.dm_exec_sql_text(sql_handle) st 
where total_worker_time > 0 
order by (total_worker_time+0.0)/(execution_count*1000) 
end 
else 
begin 
print 'Server version is not SQL Server 2005 or above. Can''t query TOP queries' 
end" 
$SqlCmd.Connection = $SqlConnection 
$SqlAdapter.SelectCommand = $SqlCmd 
$SqlAdapter.Fill($DataSet)|out-null 
$dbs =$DataSet.Tables[0] 
$dbs 
 $SqlConnection.Close() 
} 
Bước 2 
Gắn thêm vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đoạn mã sau. 
. ./checktopqueries.ps1 
Lúc này file C:\CheckSQLServer\CheckSQL_Lib.ps1 sẽ có pinghost, checkservices, 
checkhardware, checkOS, checkHD, checknet, checkinstance, Checkconfiguration và 
checkdatabases như thể hiện bên dưới. 
#Source all the functions relate to CheckSQL 
. ./PingHost.ps1 
. ./checkservices.ps1 
. ./checkhardware.ps1 
. ./checkOS.ps1 
. ./checkHD.ps1 
. ./checknet.ps1 
. ./checkinstance.ps1 
. ./checkconfiguration.ps1 
. ./checkdatabases.ps1 
. ./checktopqueries.ps1 
Lưu ý: File CheckSQL_Lib.ps1 này sẽ được cập nhật từ nguồn các kịch bản mới, chẳng 
hạn như checktopqueries.ps1. 
Bước 3 
Gắn thêm vào file C:\CheckSQLServer\CheckSQLServer.ps1 đoạn mã sau. 
Write-host "Checking Top 10 Queries based on CPU Usage." 
Write-host "............................." 
checktopqueries $instancename |select-object query_text, AvgCPUTime |format-table 
CheckSQLServer.ps1 sẽ trở thành 
#Objective: To check various status of SQL Server 
#Host, instances and databases. 
#Author: MAK 
#Date Written: June 5, 2008 
param ( 
[string] $Hostname, 
[string] $instancename 
) 
$global:errorvar=0 
. ./CheckSQL_Lib.ps1 
Write-host "Checking SQL Server....." 
Write-host "........................" 
Write-host " " 
Write-host "Arguments accepted : $Hostname" 
write-host "........................" 
Write-host "Pinging the host machine" 
write-host "........................" 
pinghost $Hostname 
if ($global:errorvar -ne "host not reachable") 
{ 
Write-host "Checking windows services on the host related to SQL Server" 
write-host "..........................................................." 
checkservices $Hostname 
Write-host "Checking hardware Information....." 
Write-host ".................................." 
checkhardware $Hostname 
Write-host "Checking OS Information....." 
Write-host "............................." 
checkOS $Hostname 
Write-host "Checking HDD Information....." 
Write-host "............................." 
checkHD $Hostname 
Write-host "Checking Network Adapter Information....." 
Write-host "........................................." 
checknet $Hostname 
Write-host "Checking Configuration information....." 
Write-host "........................................." 
checkconfiguration $instancename |format-table 
Write-host "Checking Instance property Information.`...." 
Write-host "............................." 
checkinstance $instancename |format-table 
Write-host "Checking SQL Server databases....." 
Write-host "Checking Database status and size....." 
Write-host "............................." 
checkdatabases $instancename |format-table 
Write-host "Checking Top 10 Queries based on CPU Usage." 
Write-host "............................." 
checktopqueries $instancename |select-object query_text, AvgCPUTime |format-table 
} 
Lưu ý: File CheckSQLServer.ps1 sẽ được cập nhật các điều kiện mới và các tham số mới 
trong các phần sau của loạt bài này. 
Nguồn dẫn sẽ load các chức năng được liệt kê trong file kịch bản và làm cho nó trở thành 
hiện hữu trong suốt toàn bộ PowerShell session. Trong trường hợp này, chúng ta lấy 
nguồn từ một kịch bản, kịch bản đó lại được dẫn nguồn từ nhiều kịch bản khác. 
Bước 4 
Lúc này chúng ta hãy thực thi kịch bản, CheckSQLServer.ps1, bằng cách sử dụng 
“PowerServer3” như một đối số và Powerserver3\SQL2008 như một đối số thứ hai như 
thể hiện bên dưới. 
./CheckSQLServer.ps1 PowerServer3 PowerServer3\SQL2008 
Chúng ta sẽ thu được các kết quả như thể hiên bên dưới (tham khảo hình 1.0) 
Kết quả 
... 
... 
... 
... 
Checking Top 10 Queries based on CPU Usage. 
............................. 
WARNING: column "AvgCPUTime" does not fit into the display and was removed. 
query_text 
---------- 
select top 2... 
select top 2... 
UPDATE [Notifications] WITH (TABLOCKX)... 
select name from master.dbo.sysdatabases 
select @dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end))... 
select @dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end))... 
select @configcount = count(*)... 
UPDATE [Event] WITH (TABLOCKX)... 
select @confignum = configuration_id, @prevvalue = convert(int, isnull(value, 
value_in_use))... 
Update [Notifications] set [ProcessStart] = NULL, [ProcessHeartbeat] = NULL, 
[Attempt] = [Attemp... 
 Hình 1.0 
Bước 5 
Chúng ta hãy thực thi kịch bản trên máy tính không tồn tại như thể hiện bên dưới. 
./CheckSQLServer.ps1 TestServer testserver 
Các kết quả nhận được như thể hiện bên dưới (tham khảo hình 1.1) 
 Hình 1.1 
Kết luận 
Phần bảy này chúng tôi đã minh chứng cho các bạn được cách truy vấn Top 10 các truy 
vấn được thực thi trên SQL Server instance về hiệu suất CPU. 

File đính kèm:

  • pdfKiểm tra SQL Server bằng Windows PowerShell - Phần 7.pdf
Tài liệu liên quan