Trang Tuổi thọ nói gì về trường hợp này?


9

Tôi đã cài đặt phần mềm giám sát trên một vài phiên bản SQL Server trong môi trường. Tôi đang cố gắng tìm ra tắc nghẽn và khắc phục một số vấn đề về hiệu suất. Tôi muốn tìm hiểu xem một số máy chủ cần thêm bộ nhớ.

Tôi quan tâm đến một truy cập: tuổi thọ trang. Nó trông khác nhau trên mỗi máy. Tại sao nó thay đổi thường xuyên trong một số trường hợp và nó có nghĩa là gì?

Xin hãy xem dữ liệu từ tuần trước được thu thập trên một vài máy khác nhau. Bạn có thể nói gì về từng trường hợp?

Ví dụ sản xuất được sử dụng nhiều (1): Ví dụ sản xuất được sử dụng nhiều (1)

Sản xuất được sử dụng vừa phải (2) Sản xuất được sử dụng vừa phải (2)

Hiếm khi sử dụng ví dụ thử nghiệm (3)

Hiếm khi sử dụng ví dụ thử nghiệm (3)

Ví dụ sản xuất được sử dụng nhiều (4) Ví dụ sản xuất được sử dụng nhiều (4)

Ví dụ kiểm tra được sử dụng vừa phải (5) Ví dụ kiểm tra được sử dụng vừa phải (5)

Kho dữ liệu được sử dụng nhiều (6) Kho dữ liệu được sử dụng nhiều (6)

EDIT: Tôi đang thêm đầu ra của SELECT @@ VERSION cho tất cả các máy chủ này:

Instance 1: Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation
 Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)


Instance 2: Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
Oct 19 2012 13:38:57 
Copyright (c) Microsoft Corporation
 Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)


Instance 3: Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
May 14 2014 18:34:29 
    Copyright (c) Microsoft Corporation
 Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Instance 4: Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) Jun 28 2012 08:36:30 
Copyright (c) Microsoft Corporation
 Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)


Instance 5: Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
May 14 2014 18:34:29 
Copyright (c) Microsoft Corporation
 Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Instance 6: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
Apr 2 2010 15:48:46 
Copyright (c) Microsoft Corporation
 Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Tôi cũng đã chạy truy vấn sau đây trên các máy:

SELECT DISTINCT memory_node_id
FROM sys.dm_os_memory_clerks

và nó trả về 2 hoặc 3 hàng cho mỗi máy chủ:

Instance 1: 0; 64; 1
Instance 2: 0; 64
Instance 3: 0; 64
Instance 4: 0; 64
Instance 5: 0; 64
Instance 6: 0; 64; 1

Nó có nghĩa là gì? Các máy chủ này có chạy NUMA không?


Trường hợp 2 có SQL Server 2012 và các phiên bản khác là SQL Server 2008 R2
BuahahaXD

Tỷ lệ của các biểu đồ không thực sự giúp đỡ. Sẽ thú vị hơn khi thấy mức độ gần bằng không của các máy chủ bận rộn trong ngày.
James Z

Tôi ước tôi có thể có được dữ liệu chi tiết hơn. Tôi đã sử dụng Trình theo dõi hiệu suất cơ sở dữ liệu của Solarwinds và không có cách nào để xuất dữ liệu vào một tệp. Cách duy nhất để làm điều đó là truy vấn cơ sở dữ liệu của nó nhưng cấu trúc không được chuẩn hóa cũng như không dễ nắm bắt.
BuahahaXD

1
Để giúp bạn hiểu được sự sụt giảm đột ngột: Khi một đợt quét dữ liệu lớn không được xử lý được thực thi, rất nhiều trang đang bị đuổi để nhường chỗ cho các trang mới. Đó là một thuật toán LRU được sửa đổi. Trang mới thả cái cũ.
usr

Trường hợp 2 và 6 sử dụng NUMA, những trường hợp khác thì không.
BuahahaXD

Câu trả lời:


8

Lấy từ MSDN: - https://msdn.microsoft.com/en-us/l Library / ms189628.aspx

Tuổi thọ của trang - Cho biết số giây mà một trang sẽ ở trong vùng đệm mà không cần tham chiếu.

SQL luôn tìm kiếm các trang dữ liệu trong bộ nhớ. Nếu một trang dữ liệu không có trong bộ nhớ, SQL sẽ phải vào đĩa (thực hiện thao tác IO vật lý) để truy xuất dữ liệu mà nó cần để thực hiện yêu cầu. Nếu bộ đếm PLE của bạn ở mức thấp cho biết các trang dữ liệu trong bộ nhớ thường xuyên bị ghi đè bằng các trang mới đến từ các hoạt động IO vật lý. Các hoạt động IO vật lý có nghĩa là đắt tiền mà hiệu suất của cá thể SQL của bạn sẽ bị ảnh hưởng bất lợi. Vì vậy, bạn sẽ muốn bộ đếm PLE của bạn càng cao càng tốt.

Bỏ qua mọi lời khuyên mà bạn thấy trực tuyến đề cập đến 300 như một ngưỡng tốt cho bộ đếm này

Ngưỡng này xuất phát từ những ngày bộ nhớ bị giới hạn (nghĩ rằng hệ thống 32 bit). Bây giờ chúng tôi có các hệ thống 64 bit có thể có TB RAM, vì vậy lời khuyên này rất lỗi thời.

Điều đầu tiên, bạn có giới hạn bộ nhớ của SQL không? Nếu vậy, còn lại bao nhiêu bộ nhớ? Giới hạn có thể được tăng lên?

Điều thứ hai tôi sẽ tìm kiếm trên các máy chủ của bạn là, có công việc bảo trì nào đang chạy không? Kiểm tra các công việc thực hiện xây dựng lại chỉ mục, cập nhật số liệu thống kê hoặc các hoạt động DBCC CHECKDB. Chúng thực hiện một số lượng lớn các lần đọc và có thể là lý do cho lớp lót phẳng PLE của bạn,

Tiếp theo, khi bạn đang sử dụng SQL Server 2008 +, bạn có thể thiết lập phiên Sự kiện mở rộng để nắm bắt các truy vấn đang thực hiện với số lượng lớn các lần đọc. Đây là mã để làm như vậy: -

CREATE EVENT SESSION [QueriesWithHighLogicalReads] ON SERVER 
ADD EVENT sqlserver.sql_batch_completed(
   ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_stack,sqlserver.username)
     WHERE ([logical_reads]>200000))
ADD TARGET package0.event_file(SET filename=N'C:\SQLServer\XEvents\QueriesWithHighLogicalReads.xel')
GO

Điều này sẽ nắm bắt tất cả các truy vấn trên máy chủ của bạn thực hiện hơn 200000 lần đọc logic. Tôi không biết bạn có bao nhiêu bộ nhớ trên mỗi máy chủ để bạn có thể muốn điều chỉnh con số đó. Khi điều này đã được tạo, bạn có thể bắt đầu phiên bằng cách chạy: -

ALTER EVENT SESSION [QueriesWithHighLogicalReads]
ON SERVER
STATE = START;
GO

Và sau đó truy vấn phiên bằng cách chạy: -

WITH CTE_ExecutedSQLStatements AS
(SELECT
[XML Data],
[XML Data].value('(/event[@name=''sql_statement_completed'']/@timestamp)[1]','DATETIME')    AS [Time],
[XML Data].value('(/event/data[@name=''duration'']/value)[1]','int')                        AS [Duration],
[XML Data].value('(/event/data[@name=''cpu_time'']/value)[1]','int')                        AS [CPU],
[XML Data].value('(/event/data[@name=''logical_reads'']/value)[1]','int')                   AS [logical_reads],
[XML Data].value('(/event/data[@name=''physical_reads'']/value)[1]','int')                  AS [physical_reads],
[XML Data].value('(/event/action[@name=''sql_text'']/value)[1]','varchar(max)')             AS [SQL Statement]
FROM
    (SELECT 
    OBJECT_NAME              AS [Event], 
    CONVERT(XML, event_data) AS [XML Data]
FROM 
    sys.fn_xe_file_target_read_file
('C:\SQLServer\XEvents\QueriesWithHighLogicalReads*.xel',NULL,NULL,NULL)) as v)

SELECT
[SQL Statement]     AS [SQL Statement],
SUM(Duration)       AS [Total Duration],
SUM(CPU)            AS [Total CPU],
SUM(Logical_Reads)  AS [Total Logical Reads],
SUM(Physical_Reads) AS [Total Physical Reads]
FROM
CTE_ExecutedSQLStatements
GROUP BY
[SQL Statement]
ORDER BY
[Total Logical Reads] DESC
GO

Hãy cẩn thận khi chạy này! Các tập tin có thể phát triển kích thước khá lớn, vì vậy trước tiên hãy kiểm tra nó trên một ví dụ phát triển. Bạn có thể đặt tối đa. kích thước của tập tin nhưng tôi không bao gồm nó ở đây. Đây là liên kết MSDN cho các sự kiện mở rộng: - https://msdn.microsoft.com/en-us/l Library / hh213147.aspx

Theo dõi phiên này thường xuyên và hy vọng nó sẽ nhận được bất kỳ truy vấn nào đến trong đó là lót phẳng PLE của bạn.

Đọc thêm -

Blog MSDN trên PLE - http://bloss.msdn.com/b/mcsukbi/archive/2013/04/12/sql-server-page-life-recectancy.aspx

Video về thiết lập Sự kiện mở rộng - https://dbafromthecold.wordpress.com/2014/12/05/video-identifying-large-queries-USE-extends-events/ (Đó là từ blog của riêng tôi rất xin lỗi về việc tự quảng cáo không biết xấu hổ )


4

Tuổi thọ của trang là thước đo thời gian bạn có thể mong đợi một trang vừa được đọc từ đĩa bị treo xung quanh trong bộ nhớ trước khi nó bị đẩy ra bởi một thứ khác hoặc bị phá hủy (nghĩa là trang đó được giải phóng trên đĩa không cần thiết để giữ một bản sao lưu trong bộ nhớ cache trong RAM).

Là một biện pháp chung, càng cao thì mẫu tải của bạn sẽ được xử lý càng nhanh vì mọi thứ đang được lưu giữ trong bộ nhớ. Nếu nó rất thấp, điều này có thể chỉ ra vấn đề về hiệu năng gây ra bởi tình trạng đói bộ nhớ.

Việc đọc ở mức thấp không phải lúc nào cũng có nghĩa là có một vấn đề: ví dụ: nó có thể thấp sau một loạt các quá trình sử dụng nhiều trang nên đã đưa chúng vào và chúng bị bỏ để nhường chỗ cho nhiều hơn. Ví dụ, biểu đồ của bạn dường như giảm vào cuối mỗi ngày, có thể do các công việc quản trị hàng đêm (sao lưu, lưu trữ dữ liệu, xử lý qua đêm khác).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.