Xin chào,
Tôi sẽ tiếp tục giải thích cách Khắc phục sự cố Hiệu suất của SQL Server trong Loạt bài viết này.
Khắc phục sự cố hiệu suất máy chủ SQL
Đọc bài viết trước trước bài viết này.
Giám sát bộ đếm hiệu suất qua PERFMON | Khắc phục sự cố hiệu suất máy chủ SQL -3
DMV (Chế độ xem quản lý động)
Với DMV (Chế độ xem quản lý động) và DMF (Chức năng quản lý động) được giới thiệu trong SQL Server 2005, bạn có thể theo dõi tất cả các hoạt động xảy ra trong cơ sở dữ liệu, trạng thái hiệu suất và hiển thị thông tin hệ thống để quản lý và giám sát cơ sở dữ liệu.
Tất cả các cơ sở dữ liệu (Oracle, SQL Server, MySQL, Sybase, PostreSQL, DB2, v.v.) đều thu thập Một số thông tin nội bộ (các hoạt động Phiên, Quy trình, v.v. và thống kê của chúng) về hệ thống và cung cấp những dữ liệu này dưới dạng các Bảng và Chế độ xem Hệ thống.
Để có được thông tin về Hệ điều hành và Cơ sở dữ liệu, thông tin sau thường có sẵn trong bảng Hệ thống được SQL Server cập nhật định kỳ.
- Thông tin Chung về Cơ sở dữ liệu và Máy chủ Cơ sở dữ liệu (Tên, Phiên bản, Phiên bản, Bộ ký tự, v.v.)
- Truy vấn Hoạt động
- Mức sử dụng CPU, I / O và Bộ nhớ của các Truy vấn Hoạt động
- Kế hoạch Thực hiện
- Chỉ mục được sử dụng bởi một Truy vấn đang chạy
- I / O chờ trong Bộ nhớ, Đĩa và Mạng
- Thiếu các Chỉ mục ảnh hưởng xấu đến hiệu suất của Cơ sở dữ liệu
- Tỷ lệ sử dụng chỉ mục (Quét, Tìm kiếm giá trị)
- Thời gian phản hồi của đĩa
DMF (Chức năng quản lý động)
Mặc dù DMV và DMF có vẻ giống nhau trong SQL Server, sự khác biệt giữa chúng có thể được truy vấn trực tiếp dưới dạng tên của DMV, trong khi DMF là các hàm nhận một tham số và trả về một bảng tương ứng.
Nhờ DMV và DMF, bạn có thể giám sát các cơ sở dữ liệu quan trọng đang chạy như Sản xuất, xác định các vấn đề ngay lập tức và thực hiện hành động phù hợp. Với các truy vấn này, bạn có thể truy vấn hầu hết các câu lệnh CPU, I / O và Tiêu tốn bộ nhớ từ các truy vấn đang chạy trong Cơ sở dữ liệu, tìm các bảng chỉ mục bị thiếu và tìm các truy vấn chạy chậm.
Tất cả DMV và DMF có sẵn trong SQL Server có thể được truy vấn bằng truy vấn sau.
chọn tên, type_desc từ sys.system_objects trong đó tên như 'dm%' sắp xếp theo tên;
Các DMV và DMF này được sử dụng trong SQL Server cung cấp thông tin cho người dùng theo các Danh mục như Phiên, Cơ sở dữ liệu, Hệ điều hành (Hệ điều hành), Giao dịch, v.v. Ví dụ; DMV và DMF tại danh mục Cơ sở dữ liệu bắt đầu bằng sys.dm_db hoặc DMV và DMF liên quan đến Giao dịch bắt đầu bằng sys.dm_tran .
Danh sách DMV và DMF theo danh mục như sau.
DMV và DMF được sử dụng phổ biến nhất như sau.
Thực thi (SQL, Truy vấn, Quy trình, v.v.): DMV và DMF của truy vấn đang hoạt động cung cấp thông tin như người dùng được gọi từ máy nào, các quy trình, thời gian kết thúc ước tính và thống kê Truy vấn.
Những điều quan trọng nhất như sau.
- sys.dm_exec_query_stats (DMV)
- sys.dm_exec_requests (DMV)
- sys.dm_exec_sessions (DMV)
- sys.dm_exec_connections (DMV)
- sys.dm_exec_query_plan (DMF)
- sys.dm_exec_sql_text (DMF)
- sys.dm_exec_cached_plans (DMV)
- sys.dm_exec_cursors (DMF)
Cơ sở dữ liệu: Đó là DMV và DMF cung cấp thông tin cần thiết về Index, Mirroring và phân vùng ở cấp độ cơ sở dữ liệu. Những điều quan trọng nhất như sau.
- sys.dm_db_missing_index_details (DMV)
- sys.dm_db_missing_index_columns (DMF)
- sys.dm_db_missing_index_groups (DMV)
- sys.dm_db_missing_index_group_stats (DMV)
- sys.dm_db_index_usage_stats (DMV)
- sys.dm_db_index_physical_stats (DMF)
- sys.dm_db_index_operational_stats (DMF)
- dm_db_partition_stats (DMV)
- sys.dm_db_mirroring_connections (DMV)
Hệ điều hành: Đó là DMV và DMF cung cấp thông tin cần thiết về Hệ điều hành. Những điều quan trọng nhất như sau.
- sys.dm_os_sys_info (DMV)
- sys.dm_os_sys_memory (DMV)
- sys.dm_os_waiting_tasks (DMV)
- sys.dm_os_wait_stats (DMV)
- sys.dm_os_waiting_tasks (DMV)
- sys.dm_os_performance_counters (DMV)
- sys.dm_os_cluster_nodes (DMF)
- sys.dm_tran_active_transactions (DMV)
- sys.dm_tran_session_transactions (DMV)
- sys.dm_tran_database_transactions (DMV)
- sys.dm_tran_current_transaction (DMV)
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. ) dưới dạng [AvgCPUTime], total_logical_reads as [LogicalReads], total_logical_writes as [logicWrites], execute_count, create_time, last_execution_time, total_logical_reads + total_logical_writes as [AggIO], (total_logical_reads_reads_ total_logical_writes) st.dbid) dưới dạng database_name, st.objectid dưới dạng object_idfrom sys.dm_exec_query_stats qs áp dụng chéo sys.dm_exec_sql_text (sql_handle) st ÁP DỤNG CROSS sys.dm_exec_query_plan (qs.plan_handle) NHƯ qp trong đó total_worker_time> 0 đặt hàng theo total_worker_time desc;
Khi tôi chạy truy vấn trên trong cơ sở dữ liệu thử nghiệm AdventureWorks mà tôi đã sử dụng cho các thử nghiệm của mình, kết quả sẽ như sau.
Tôi sẽ chia sẻ tập lệnh (Bao gồm Hệ điều hành và Cơ sở dữ liệu DMV và DMF) cung cấp thông tin chung về Hệ điều hành mà phiên bản cơ sở dữ liệu SQL Server đang chạy, chẳng hạn như Tổng CPU, Bộ nhớ, Tổng dung lượng đĩa, Kích thước cơ sở dữ liệu và Kích thước nhật ký giao dịch.
Tập lệnh này đặc biệt cần thiết khi chuẩn bị kiểm kê cơ sở dữ liệu của bạn.
sp_configure 'hiển thị tùy chọn nâng cao', 1; GORECONFIGURE; GOsp_configure 'Quy trình tự động hóa Ole', 1; GORECONFIGURE; GO / *********************** ******************************** / ĐẶT SỐ KHOẢN KHAI THÁC @hr intDECLARE @fso intDECLARE @drive char (1) DECLARE @ odrive intDECLARE @TotalSize varchar (20) DECLARE @MB Numeric; SET @MB =1048576CREATE TABLE #drives (drive char (1) PRIMARY KEY, FreeSpace int NULL, TotalSize int NULL) INSERT #drives (drive, FreeSpace) EXECmaster.dbo.xp_fixeddrives EXEC @ hr =sp_OACreate'Scripting.FileSystemObject ', @ fso OUT IF @hr <> 0 EXEC sp_OAGetErrorInfo @ fsoDECLARE dcur CURSOR LOCAL FAST_FORWARDFOR CHỌN ổ đĩa từ #drives ORDER bằng driveOPEN dcur FETCH TIẾP THEO TỪ dcur INTO @driveWhoILE @@ FETCH_STATUS =0Bdrive @ fsoAMet @hrrive =0Bdrive @ fsoAMet @hrrive OUT, @driveIF @hr <> 0 EXEC sp_OAGetErrorInfo @fso EXEC @hr =sp_OAGetProperty @ odrive, 'TotalSize', @TotalSize OUT IF @hr <> 0 EXEC sp_OAGetErrorInfo @ odrive CẬP NHẬT #drives SET example @ sqldat.com / @ MB [email protected] TÌM KIẾM TIẾP THEO TỪ dcur VÀO @driveEndClose dcurDEALLOCATE dcurEXEC @ hr =sp_OADestroy @fso IF @hr <> 0 EXEC sp_OAGetErrorInfo @ fso - SELECT @@ Servername - SELECT - drive, TotalSize as 'Total (MB) ', FreeSpace là' Miễn phí (MB) 'TỪ # ổ - ĐẶT HÀNG THEO ổ
TẠO BẢNG #CPUInfo (Logical_CPU_Count bigint, Hyperthread_Ratio bigint, Physical_CPU_Count bigint, Physical_Memory_MB bigint)
INSERT INTO #CPUInfo (Logical_CPU_Count, Hyperthread_Ratio, Physical_CPU_Count, Physical_Memory_MB) CHỌN cpu_count AS [Logical_CPU_Count], hyperthread_ratio AS [Hyperthread_Ratio, Physical_CPU_Count, Physical_Memory_MB) SELECT cpu_count AS [Logical_CPU_Count], hyperthread_ratio AS [Hyperthread_Ratio], Physical_count / hyperthread_CPU_mages AS [Vật lý] trước>CREATE TABLE #DatabaseInfo (Machine_Name varchar (50), Instance_Name varchar (50), Sql_Server_Name varchar (50), Total_Database_log_size_MB bigint, Total_Database_log_used_MB bigint, Total_Database_ata_File_File_Size_MB bigint_Server_Name_log_size, TotalMBat Total_Database_Data_File_Size_MB) chọn convert (varchar (50), serverproperty ('MachineName')) 'Machine_Name', chuyển đổi (varchar (50), isnull (serverproperty ('InstanceName'), 'mssqlserver')) 'Instance_Name', chuyển đổi (varchar ( 50), @@ SERVERNAME) 'Sql_Server_Name', sum (ls.cntr_value / 1024) là [Total_Database_log_size_MB], sum (lu.cntr_value / 1024) dưới dạng [Total_Database_log_used_MB], sum (ds.MB.cntr_value] từ Total_Data_data_data_data_data_date_data_data_data_data_data_Size sys.databases d nối ngoài bên trái sys.dm_os_performance_counters dưới dạng lu trên lu.instance_name =d.name và lu.counter_name như (các) tệp N'Log Kích thước đã sử dụng (KB)% 'bên trái tham gia sys.dm_os_performance_counters as ls trên ls. insta nce_name =d.name và ls.counter_name như N'Log Kích thước tệp (KB)% 'và ls.cntr_value> 0 bên trái tham gia sys.dm_os_performance_counters với tư cách lp trên lp.instance_name =d.name và lp.counter_name như N'Percent Log Được sử dụng% 'bên trái tham gia sys.dm_os_performance_counters dưới dạng ds trên ds.instance_name =d.name và ds.counter_name như N'Data File (s) Size (KB)%' where d.database_id> 4; --SQL database ler haricWITH SizeDisc AS (- sunucu üzerindeki tüm drive size ve free size bilgisiSELECT SUM (TotalSize) as 'Total_Disc_Sizeon_Server_MB', SUM (FreeSpace) as 'Total_Free_Disc_SizeOn_Server_MB' FROM #drives, SELECT SizeDiscDROP TABLE #Drives DROP TABLE #DatabaseInfoDROP TABLE #CPUInfo GO / ************************************* ****************** // * Tắt quy trình tự động hóa Ole * / sp_configure 'hiển thị tùy chọn nâng cao', 1; GORECONFIGURE; GOsp_configure 'Quy trình tự động hóa Ole', 0; GORECONFIGURE; / ************************************************** ***** / ĐI
Đầu ra của tập lệnh như sau.
Tôi sẽ tiếp tục giải thích về Khắc phục sự cố hiệu suất máy chủ SQL trong bài viết tiếp theo.
Khắc phục sự cố hiệu suất SQL Server -5 Sử dụng SQL Server Profiler