Apa yang dikatakan Page Life Expectancy tentang instance?


9

Saya telah menginstal perangkat lunak pemantauan pada beberapa contoh SQL Server di lingkungan. Saya mencoba menemukan hambatan dan memperbaiki beberapa masalah kinerja. Saya ingin mengetahui apakah beberapa server membutuhkan lebih banyak memori.

Saya tertarik pada satu penghitung: harapan hidup halaman. Itu terlihat berbeda di setiap mesin. Mengapa sering berubah pada beberapa kasus dan apa artinya?

Silakan lihat data dari minggu lalu yang dikumpulkan di beberapa mesin yang berbeda. Apa yang bisa Anda katakan tentang setiap contoh?

Contoh produksi yang sangat banyak digunakan (1): Contoh produksi yang sangat banyak digunakan (1)

Istance produksi sedang digunakan (2) Istance produksi sedang digunakan (2)

Contoh uji yang jarang digunakan (3)

Contoh uji yang jarang digunakan (3)

Contoh produksi yang sangat banyak digunakan (4) Contoh produksi yang sangat banyak digunakan (4)

Contoh uji yang cukup digunakan (5) Contoh uji yang cukup digunakan (5)

Gudang data yang sangat digunakan (6) Gudang data yang sangat digunakan (6)

EDIT: Saya menambahkan output SELECT @@ VERSION untuk semua server ini:

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)

Saya juga menjalankan kueri berikut pada mesin:

SELECT DISTINCT memory_node_id
FROM sys.dm_os_memory_clerks

dan mengembalikan 2 atau 3 baris untuk setiap server:

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

Apa artinya? Apakah server ini menjalankan NUMA?


Instance 2 memiliki SQL Server 2012 dan yang lainnya adalah SQL Server 2008 R2
BuahahaXD

Skala grafik tidak terlalu membantu. Akan lebih menarik untuk melihat seberapa dekat dengan nol server sibuk pada siang hari.
James Z

Saya berharap bisa mendapatkan data yang lebih rinci. Saya menggunakan Solarwinds Database Performance Monitor dan tidak ada cara untuk mengekspor data ke file. Satu-satunya cara untuk melakukan itu adalah dengan query database-nya tetapi strukturnya tidak dinormalisasi atau mudah dipahami.
BuahahaXD

1
Untuk membantu Anda memahami tetesan tiba-tiba: Ketika pemindaian besar dari data yang tidak disimpan dijalankan banyak halaman digusur untuk memberikan ruang bagi halaman baru. Ini adalah algoritma LRU yang dimodifikasi. Halaman baru menjatuhkan yang lama.
usr

Contoh 2 dan 6 menggunakan NUMA, yang lain tidak.
BuahahaXD

Jawaban:


8

Diambil dari MSDN: - https://msdn.microsoft.com/en-us/library/ms189628.aspx

Harapan hidup halaman - Menunjukkan jumlah detik halaman akan tetap di kolam buffer tanpa referensi.

SQL selalu mencari halaman data dalam memori. Jika halaman data tidak ada dalam memori SQL harus pergi ke disk (melakukan operasi IO fisik) untuk mengambil data yang diperlukan untuk memenuhi permintaan. Jika penghitung PLE Anda rendah, ini menunjukkan bahwa halaman data dalam memori secara teratur telah ditimpa dengan halaman baru yang berasal dari operasi IO fisik. Operasi IO fisik mahal artinya kinerja turunan SQL Anda akan terpengaruh. Jadi, Anda ingin penghitung PLE Anda setinggi mungkin.

Abaikan saran apa pun yang Anda lihat online yang menyebutkan 300 sebagai ambang batas yang baik untuk penghitung ini

Ambang ini berasal dari hari-hari ketika memori terbatas (pikirkan sistem 32-bit). Sekarang kami memiliki sistem 64-bit yang dapat memiliki TB RAM sehingga saran ini sangat ketinggalan zaman.

Hal pertama, sudahkah Anda membatasi memori SQL? Jika demikian, berapa banyak memori yang tersisa? Bisakah batas ditingkatkan?

Hal kedua yang akan saya cari di server Anda adalah, apakah ada pekerjaan pemeliharaan yang berjalan? Periksa pekerjaan yang melakukan pembangunan kembali indeks, perbarui statistik atau operasi DBCC CHECKDB. Ini melakukan sejumlah besar bacaan dan bisa menjadi alasan untuk lapisan datar PLE Anda,

Selanjutnya, saat Anda menggunakan SQL Server 2008 +, Anda bisa mengatur sesi Peristiwa Diperpanjang untuk menangkap kueri yang masuk yang sedang melakukan sejumlah besar pembacaan. Berikut kode untuk melakukannya: -

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

Ini akan menangkap semua kueri di server Anda yang melakukan lebih dari 200000 pembacaan logis. Saya tidak tahu berapa banyak memori yang Anda miliki di setiap server sehingga Anda mungkin ingin mengubah angka itu. Setelah ini dibuat, Anda dapat memulai sesi dengan menjalankan: -

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

Lalu kueri sesi dengan menjalankan: -

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

Hati-hati saat menjalankan ini! Ukuran file bisa tumbuh cukup besar jadi cobalah terlebih dahulu pada contoh pengembangan. Anda dapat mengatur maks. ukuran file tetapi saya belum memasukkannya di sini. Berikut tautan MSDN untuk Acara yang Diperpanjang: - https://msdn.microsoft.com/en-us/library/hh213147.aspx

Pantau sesi ini secara rutin dan semoga sesi ini akan menjawab pertanyaan apa pun yang masuk ke PLE Anda.

Bacaan lebih lanjut -

Blog MSDN di PLE - http://blogs.msdn.com/b/mcsukbi/archive/2013/04/12/sql-server-page-life-expectancy.aspx

Video tentang pengaturan Acara yang Diperpanjang - https://dbafromthecold.wordpress.com/2014/12/05/video-identifying-large-queries-using-extended-events/ (Ini dari blog saya sendiri, maaf tentang promosi mandiri yang tidak tahu malu ini. )


4

Harapan hidup halaman adalah ukuran berapa lama Anda dapat mengharapkan halaman yang baru saja dibaca dari disk untuk berkeliaran di memori sebelum didorong oleh sesuatu yang lain atau dihancurkan (yaitu halaman yang tidak dialokasikan pada disk untuk tidak perlu lagi untuk menyimpan salinan dalam cache RAM).

Sebagai ukuran umum, semakin tinggi semakin cepat pola beban Anda akan diproses karena semuanya disimpan dalam memori. Jika sangat rendah ini dapat mengindikasikan masalah kinerja yang disebabkan oleh kehabisan memori.

Pembacaan yang rendah tidak selalu berarti ada masalah: misalnya, bisa jadi rendah setelah banyaknya sekali proses yang menggunakan banyak halaman sehingga mereka dibawa masuk dan mereka turun untuk memberi ruang lebih banyak. Grafik Anda yang tampaknya turun pada akhir setiap hari misalnya, dapat disebabkan oleh pekerjaan administrasi malam (cadangan, pengarsipan data, pemrosesan semalam lainnya).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.