1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Kiểm tra SQL Server bằng Windows PowerShell – Phần 7 docx

6 480 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Kiểm Tra SQL Server Bằng Windows PowerShell – Phần 7
Trường học University of Information Technology
Chuyên ngành Information Technology
Thể loại Tài liệu
Năm xuất bản 2008
Thành phố Ho Chi Minh City
Định dạng
Số trang 6
Dung lượng 266,79 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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]

Trang 2

, 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

Trang 3

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 "

Trang 4

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

Trang 5

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)

Trang 6

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

 

Ngày đăng: 22/12/2013, 22:16

TỪ KHÓA LIÊN QUAN