Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Điều hướng nhật ký lỗi máy chủ SQL

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. \ MSSQL \ Log cùng với các tệp theo dõi và tệp kết xuất. Nhật ký lỗi SQL Server được đặt tên là ERRORLOG.x (trong đó x là một số) trong khi Nhật ký tác nhân SQL được đặt tên là SQLAGENT.x.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 6 Truy vấn sự cố làm chậm cơ sở dữ liệu của bạn

  2. tham gia chéo sql - có ai tìm thấy công dụng gì cho nó?

  3. Làm cách nào để trả về nhiều tập kết quả với SqlCommand?

  4. Lấy hình ảnh từ cơ sở dữ liệu trong asp.net

  5. Tôi có thể sử dụng Kiểu dữ liệu ngày trong máy chủ sql như thế nào?