Giới thiệu
Một trong những kỹ năng quan trọng bạn cần có với tư cách là quản trị viên cơ sở dữ liệu hoặc dân IT nói chung là khả năng giám sát hệ thống rất cẩn thận. Thiếu kỹ năng quan trọng này có thể dẫn đến chẩn đoán sai khi khắc phục sự cố. SQL Server trình bày một số công cụ có thể hỗ trợ DBA trong việc khắc phục sự cố xảy ra trong quá trình sản xuất. Nhật ký lỗi SQL Server và Nhật ký tác nhân SQL Server là hai trong số những phương tiện quan trọng nhất để khắc phục sự cố SQL Server. Trong bài viết này, chúng ta sẽ khám phá các cách chúng ta có thể thao tác với Nhật ký Máy chủ và Tác nhân.
Hành vi mặc định
Theo mặc định, SQL Server giữ sáu Nhật ký lỗi cuối cùng và chín nhật ký Tác nhân cuối cùng trong trường hợp. Theo mặc định, một tệp nhật ký mới được tạo mỗi khi phiên bản của tác nhân được khởi động lại. Số lượng tệp nhật ký được lưu giữ có thể được sửa đổi cho các nhật ký SQL Server bằng cách sử dụng câu lệnh của GUI tương đương bên dưới (Hình 1). Để mở GUI này trong Object Explorer, nhấp chuột phải vào Quản lý , chọn Nhật ký lỗi máy chủ SQL và nhấp vào Định cấu hình .
Hình 1. Sáu bản ghi lỗi cuối cùng
Mỗi tệp nhật ký được tạo khi khởi động lại và được lưu trữ vật lý trong C: \ Program Files \ Microsoft SQL Server \ MSSQL14.
Trong quá trình khởi động phiên bản, công cụ ghi thông tin chính vào Nhật ký lỗi sẽ bao gồm:
Chi tiết về phiên bản SQL Server Nhà sản xuất hệ thống
- ID quy trình máy chủ SQL
- Số cổng đang được sử dụng
- Chế độ xác thực
- Tham số khởi động sổ đăng ký
- Tài khoản Dịch vụ
- Kích thước CPU và Bộ nhớ được phát hiện
- Trạng thái của các tùy chọn Chính, ví dụ:Các trang lớn, Phần mở rộng vùng đệm, OLTP trong bộ nhớ, v.v.
Thông tin này có thể rất hữu ích khi bạn chỉ muốn nhanh chóng tìm hiểu về bất kỳ thông tin nào trong số chúng từ phiên bản được giới thiệu cho bạn.
Định cấu hình các tùy chọn nhật ký lỗi
Như đã đề cập trước đó, một số khía cạnh nhất định của Nhật ký lỗi SQL và nhật ký tác nhân có thể định cấu hình. Trong môi trường của tôi, chúng tôi đặt NumErrorLogs đến 30 vì chúng tôi muốn giữ các nhật ký trong 30 ngày qua hàng ngày. Chúng tôi đảm bảo rằng mỗi tệp nhật ký chứa dữ liệu của một ngày bằng cách chạy sp_cycle_errorlog (và sp_cycle_agent_errorlog) vào lúc nửa đêm bằng Công việc Đại lý. Liệt kê 3 cho thấy các chi tiết của công việc này. Các thủ tục được lưu trữ này cũng có thể khá hữu ích để xoay vòng nhật ký lỗi một cách rõ ràng khi bạn muốn tạo lại sự cố và xem nó diễn ra (tức là trước khi chuyển sang SQL Profiler hoặc Extended Events).
-- Listing 1: Configure NumErrorLogs USE [master] GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 GO
Hình 2. Đặt số lượng tệp nhật ký lỗi tối đa
Nhật ký lỗi tác nhân SQL có thể được định cấu hình ở một số mức độ chi tiết bằng cách nhấp chuột phải vào Tác nhân máy chủ SQL , rồi đến Nhật ký lỗi và chọn Định cấu hình từ menu. Liệt kê 2 và Hình 2 cho thấy cách sửa đổi cấp độ ghi nhật ký.
-- Listing 2: Setting Error Logging Level USE [msdb] GO EXEC msdb dbo.sp_set_sqlagent_properties @errorlogging_level 7 GO
Hình 3. Đặt tùy chọn nhật ký lỗi tác nhân SQL
-- Listing 3 /* Create Job to Cycle Server and Agent Error Logs */ USE [msdb] GO /****** Object: Job [Cycle Error Logs] Script Date: 01/25/2015 15:40:34 ******/ BEGIN TRANSACTION DECLARE @ReturnCode INT SELECT @ReturnCode = 0 /****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 01/25/2015 15:40:34 ******/ IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class 1 BEGIN EXEC @ReturnCode = msdb dbo sp_add_category @class N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END DECLARE @jobId BINARY(16 EXEC @ReturnCode = msdb dbo sp_add_job @job_name=N'Custom_Cycle_Error_Logs', @enabled 1 @notify_level_eventlog 0, @notify_level_email 0, @notify_level_netsend 0 @notify_level_page 0 @delete_level 0, @description=N'No description available.', @category_name=N'[Uncategorized (Local)]', @owner_login_name N'COMPANYDOMAIN\kigiri', @job_id = @jobId OUTPUT IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback /****** Object: Step [Step 1] Script Date: 01/25/2015 15:40:35 ******/ EXEC @ReturnCode = msdb dbo sp_add_jobstep @job_id @jobId, @step_name N'Step 1', @step_id 1 @cmdexec_success_code 0 @on_success_action 1 @on_success_step_id 0, @on_fail_action 2 @on_fail_step_id 0, @retry_attempts 0 @retry_interval 0 @os_run_priority 0, @subsystem=N'TSQL', @command=N'EXEC master.sys.sp_cycle_errorlog GO EXEC msdb.dbo.sp_cycle_agent_errorlog GO', @database_name=N'master', @flags 0 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb dbo sp_update_job @job_id = @jobId @start_step_id = 1 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb dbo sp_add_jobschedule @job_id @jobId @name N'Daily Schedule', @enabled 1 @freq_type 4, @freq_interval 1 @freq_subday_type 1 @freq_subday_interval 0 @freq_relative_interval 0 @freq_recurrence_factor 0 @active_start_date 20121208, @active_end_date 99991231 @active_start_time 0 @active_end_time 235959 [email protected]_uid=N'f3eb3e85-9875-4cf5-a789-8c558b772d27' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb dbo sp_add_jobserver @job_id = @jobId @server_name = N'(local)' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback COMMIT TRANSACTION GOTO EndSave QuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: GO /* Change Maximum Number of Error Log Files to 30 */ USE [master] GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 GO /* Set jo history length and agent properties */ EXEC msdb dbo.sp_purge_jobhistory @oldest_date '2015-11-28T19:29:00' GO USE [msdb] GO EXEC msdb dbo.sp_set_sqlagent_properties @jobhistory_max_rows 10000, @jobhistory_max_rows_per_job 1000 GO
“Đổ” qua nhật ký
Tự làm quen với nhật ký lỗi rất hữu ích để xác định những thứ như các mục được liệt kê trong phần thứ hai hoặc theo dõi các sự kiện như khôi phục cơ sở dữ liệu lớn. Nhưng khi tìm kiếm một mục cụ thể, chẳng hạn như lỗi đăng nhập hoặc các lỗi tương tự ẩn trong biển nhật ký, bạn có thể muốn sử dụng bộ lọc hoặc tìm kiếm khả năng.
Hình 4. Lọc và tìm kiếm
Tìm kiếm sẽ hữu ích khi tìm kiếm một số hoặc văn bản lỗi cụ thể. Tìm kiếm trả về số lần xuất hiện của mục theo yêu cầu của dòng tại một thời điểm. Khi bạn cần thu hẹp nhật ký lỗi bằng cách sử dụng các tiêu chí cụ thể, hãy sử dụng bộ lọc. Bạn có thể lọc theo kết nối , ngày hoặc chung chung chi tiết.
Hình 5. Tiêu chí Tìm kiếm
Hình 6. Tiêu chí Bộ lọc
Khi bản sao bị lỗi
Một câu hỏi hay mà một độc giả quan tâm sẽ hỏi là điều gì sẽ xảy ra khi SQL Server không khởi động được? Làm thế nào để chúng tôi kiểm tra các bản ghi? Chà, điều đó xảy ra là ngoài thực tế là các bản ghi lỗi được ghi vào các tệp phẳng mà đường dẫn của chúng đã được chỉ định trước đó, bạn cũng có thể xem các bản ghi Máy chủ và Tác nhân trong Windows Event Viewer. Tất cả những gì bạn cần làm là lọc Nhật ký ứng dụng của trình xem sự kiện cho các sự kiện có nguồn MSSQLSERVER. Trong các môi trường nâng cao hơn, nhật ký SQL Server, giống như bất kỳ nhật ký Windows nào khác, có thể được lưu trữ trong một công cụ của bên thứ ba như SEIM hoặc Splunk. Điều này làm cho mọi thứ dễ dàng hơn rất nhiều. Bắt đầu với SQL Server 2012, bạn cũng có thể xem toàn bộ nhật ký lỗi ngoại tuyến từ một phiên bản khác, sử dụng các máy chủ đã đăng ký cũng như sử dụng WMI và WQL.
Hình 7. Xem nhật ký máy chủ SQL trong trình xem sự kiện
Kết luận
Nhật ký Lỗi SQL Server có thể được coi là điểm khởi đầu để khắc phục các lỗi phổ biến. Các nhật ký khác, chẳng hạn như tệp theo dõi được tạo bởi SQL Trace hoặc được thu thập bởi SQL Profiler hoặc Phiên sự kiện mở rộng cung cấp thêm chi tiết về những gì đang xảy ra bên trong công cụ. Ngoài ra còn có các bản ghi cụ thể như những bản ghi liên quan đến Thư cơ sở dữ liệu hoặc Nhân bản. Mặc dù tất cả những điều này đều rất hữu ích để khắc phục sự cố trong SQL Server, nhưng tôi khuyên bạn nên sử dụng Nhật ký lỗi SQL Server như một điểm khởi đầu tuyệt vời.
Tài liệu tham khảo
Xem Nhật ký Lỗi Máy chủ SQL
Xem tệp nhật ký ngoại tuyến
Nhật ký lỗi chu kỳ sp
Nhật ký lỗi tác nhân chu kỳ sp
Đường dẫn Cài đặt Mặc định của Máy chủ SQL