Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pemantauan TempDB SQL Server dengan Menggunakan Tampilan Manajemen Dinamis (DMV)

Apa itu TempDB di MS SQL Server?

TempDB adalah database sistem di Microsoft SQL Server yang digunakan sebagai penyimpanan objek internal, versi baris, tabel kerja, tabel sementara, dan indeks. TempDB tersedia untuk digunakan oleh semua peserta yang terhubung ke instance SQL Server (ini adalah sumber daya global). Bagi mereka yang akrab dengan rasa database lainnya, database tempDB mirip dengan tablespace TEMP di Oracle. Sederhananya, apa pun yang tidak sesuai dengan memori instan Anda tumpah ke file data tempdb.

TempDB biasanya digunakan dalam kasus berikut:

  1. Tabel sementara dibuat dengan # konvensi penamaan. Saya telah melihat satu atau dua aplikasi di toko saya yang membuat banyak konvensi ini. Akibatnya, hal itu dapat memengaruhi kinerja. Untuk setiap tabel sementara, TempDB mendistribusikan halaman yang ukurannya bergantung pada ukuran tabel. Selain itu, mungkin ada beberapa konflik jika beberapa sesi bersamaan membuat TempTables tersebut secara bersamaan.
  2. Tingkat isolasi READ_COMMITTED_SNAPSHOT diaktifkan. Kami harus melakukan ini pada dua contoh kami beberapa tahun yang lalu karena ada dua aplikasi yang mengalami sejumlah kebuntuan yang serius. Menggunakan tingkat isolasi snapshot adalah salah satu cara untuk mengatasi kebuntuan terutama jika Anda tidak ingin bolak-balik dengan pengembang tentang pengkodean yang tepat. Anda harus menyadari bahwa ini diharapkan dapat membantu meningkatkan kinerja. Namun, ia menggunakan kontrol konkurensi optimis yang mungkin tidak diinginkan dalam semua kasus sehubungan dengan integritas data.
  3. Indeks dibuat atau dibuat ulang dengan opsi SORT_IN_TEMPDB=ON. Itu cenderung menghilangkan beban penyortiran dari database yang memiliki indeks saat proses pembangunan kembali sedang berlangsung. Mungkin membantu untuk memeriksa dampak total opsi ini pada kinerja instans secara keseluruhan.
  4. Fungsi Multiple Active Result Sets (MARS) diaktifkan. Tidak, MARS bukan planet dalam skenario ini, ini adalah fitur yang memungkinkan aplikasi untuk mengirimkan beberapa batch melalui satu koneksi. Ini dinonaktifkan secara default dan dapat diaktifkan secara eksplisit dengan menyertakan MultipleActiveResultSets=True menjadi string koneksi.
  5. Secara internal, SQL Server juga menggunakan TempDB untuk membuat tabel kerja yang biasanya digunakan dalam operasi kursor – panggilan oleh klausa GROUP BY, ORDER BY, atau UNION. Tabel kerja dapat dianggap sebagai tabel sementara yang dibuat oleh aktivitas mesin SQL Server daripada oleh aktivitas pengguna secara langsung.

Tampilan Manajemen Dinamis yang Relevan SQL Server

Tampilan manajemen dinamis (DMV) yang relevan berikut ini berguna saat menyelidiki aktivitas di TempDB:

  1. sys.dm_db_file_space_usage :DMV ini mengembalikan beberapa informasi tentang penggunaan ruang file dalam database yang Anda minati. Ini dapat digunakan untuk memeriksa database apa pun dalam instance dan output hanya berkaitan dengan database itu. Dalam konteks artikel ini, kita akan menggunakan DMV untuk memeriksa TempDB.
  2. sys.dm_db_session_space_usage :DMV ini eksklusif untuk database TempDB dan mengembalikan jumlah halaman yang dialokasikan dan tidak dialokasikan oleh setiap sesi untuk database tertentu. Alokasi halaman biasanya dipertahankan hingga sesi diakhiri.
  3. sys.dm_db_task_space_usage :DMV ini juga eksklusif untuk database TempDB dan menyediakan beberapa informasi tentang jumlah halaman yang dialokasikan dan tidak dialokasikan oleh setiap tugas untuk database tertentu.
  4. sys.dm_tran_active_snapshot_database_transactions :DMV ini mengembalikan transaksi aktif yang menghasilkan dan dapat mengakses versi baris. Tampilan ini relevan bila opsi seperti ALLOW_SNAPSHOT_ISOLATION dan READ_COMMITTED_SNAPSHOT diaktifkan.
  5. sys.dm_tran_version_store :DMV ini memberikan beberapa informasi tentang semua catatan versi di toko versi. Di server produksi aktif, catatan dalam tabel ini bisa tumbuh secara signifikan. Oleh karena itu, kita perlu berhati-hati saat menanyakan DMV.

Memeriksa Perintah DMV Sebelum Bekerja dengan Database TempDB

sys.dm_file_space_usage

Kami dapat memperoleh beberapa deskripsi DMV ini dari dokumentasi Microsoft.

Tabel 1 menunjukkan deskripsi sys.dm_file_space_usage . Kueri di Daftar 1 menampilkan penggunaan ruang file untuk database TempDB dan WideWorldImporters. Gambar 1 dan 2 menampilkan output kueri ini dengan database TempDB dan WideWorldImporters.

[id tabel=44 /]

Tabel 1:deskripsi sys.dm_file_space_usage

-- List 1: Check space usage on database files
-- Check space usage on tempdb
use tempdb
go
select db_name(database_id) [Database_name]
,file_name(file_id) [File_name]
,filegroup_id
,total_page_count [TPC]
,total_page_count*8/1024 [TSU (MB)]
,allocated_extent_page_count [AEPC]
,allocated_extent_page_count*8/1024 [AEPC (MB)]
,version_store_reserved_page_count [VSRP]
,version_store_reserved_page_count*8/1024 [VSRP (MB)]
,user_object_reserved_page_count [UORP]
,user_object_reserved_page_count*8/1024 [UORPC (MB)]
,internal_object_reserved_page_count [IORPC]
,internal_object_reserved_page_count*8/1024 [UORPC (MB)]
,mixed_extent_page_count [MEPC]
,mixed_extent_page_count*8/1024 [MEPC (MB)]
from sys.dm_db_file_space_usage;
-- Check space usage on WideWorldImporters
use WideWorldImporters
go
select db_name(database_id) [Database_name]
,file_name(file_id) [File_name]
,filegroup_id
,total_page_count [TPC]
,total_page_count*8/1024 [TSU (MB)]
,allocated_extent_page_count [AEPC]
,allocated_extent_page_count*8/1024 [AEPC (MB)]
,version_store_reserved_page_count [VSRP]
,version_store_reserved_page_count*8/1024 [VSRP (MB)]
,user_object_reserved_page_count [UORP]
,user_object_reserved_page_count*8/1024 [UORPC (MB)]
,internal_object_reserved_page_count [IORPC]
,internal_object_reserved_page_count*8/1024 [UORPC (MB)]
,mixed_extent_page_count [MEPC]
,mixed_extent_page_count*8/1024 [MEPC (MB)]
from sys.dm_db_file_space_usage;

Gambar 2 Output Query pada sys.dm_file_space_usage (WideWorldImporters)

Perhatikan bahwa kolom total_page_count menunjukkan ukuran yang tepat dari file database yang bersangkutan. Selain itu, jenis file LOG dan FILESTREAM tidak ditampilkan. Juga, seperti yang diharapkan, allocated_extent_page_count cocok dengan ruang yang digunakan dalam file data WWI_UserData.

Gbr. 3 Ukuran File di Database WideWorldImporters

sys.dm_db_session_space_usage

Tabel 2 menunjukkan penggunaan DMV sys.dm_db_session_space_usage. Listing 2 adalah output dari kueri. Perhatikan bahwa jumlah baris yang dikembalikan cocok dengan jumlah sesi saat ini (aktif atau tidak aktif) dalam instance. Juga, ingatlah bahwa DMV ini HANYA berkaitan dengan TempDB.

[id tabel=45 /]

Tabel 2:deskripsi sys.dm_db_session_space_usage

-- Listing 2: Check space allocation per session in the instance
-- Applies on to tempdb database
select
session_id
,db_name(database_id) [Database_name]
,user_objects_alloc_page_count [UOAPC]
,user_objects_alloc_page_count*8/1024 [UOAPC (MB)]
,user_objects_dealloc_page_count [UODPC]
,user_objects_dealloc_page_count*8/1024 [UODPC (MB)]
,internal_objects_alloc_page_count [UOAPC]
,internal_objects_alloc_page_count*8/1024 [UOAPC (MB)]
,internal_objects_dealloc_page_count [UODPC]
,internal_objects_dealloc_page_count*8/1024 [UODPC (MB)]
from sys.dm_db_session_space_usage;
select count(*) from sys.dm_exec_sessions;

sys.dm_db_task_space_usage

Tabel 3 menunjukkan implementasi DMV sys.dm_db_task_space_usage. Listing 3 menampilkan outputnya.

[id tabel=46 /]

Tabel 3:deskripsi sys.dm_db_task_space_usage

-- List 3: Check space allocation per task int the instance
-- Applies on to tempdb database
select
task_address
,is_remote_task
,session_id
,request_id
,exec_context_id
,db_name(database_id) [Database_name]
,user_objects_alloc_page_count [UOAPC]
,user_objects_alloc_page_count*8/1024 [UOAPC (MB)]
,user_objects_dealloc_page_count [UODPC]
,user_objects_dealloc_page_count*8/1024 [UODPC (MB)]
,internal_objects_alloc_page_count [UOAPC]
,internal_objects_alloc_page_count*8/1024 [UOAPC (MB)]
,internal_objects_dealloc_page_count [UODPC]
,internal_objects_dealloc_page_count*8/1024 [UODPC (MB)]
from sys.dm_db_task_space_usage;

Kueri DMV lainnya di MSSQL TempDB

Dua DMV lainnya tampaknya kosong sebelum aktivitas database dijalankan. Tabel 4 dan 5 menunjukkan deskripsi kedua tabel. Di bagian berikutnya, kita akan melihat bagaimana data di DMV berubah saat kita membuat aktivitas database.

[id tabel=47 /]

Tabel 4:deskripsi sys.dm_tran_active_snapshot_database_transactions

[id tabel=48 /]

Tabel 5:deskripsi sys.dm_tran_version_store

Memeriksa DMV Setelah Aktivitas Basis Data Selesai

Mari buat beberapa aktivitas.

Untuk melakukannya, jalankan kueri sederhana di daftar 4.

-- Listing 4
-- Query 1
use WideWorldImporters
go
select * from
[Sales].[Invoices];
-- Query 2
use WideWorldImporters
go
select * from
[Sales].[Invoices]
order by ContactPersonID;

Seperti yang Anda lihat, tidak ada alokasi atau dealokasi yang signifikan dari kueri kecil ini, jadi kami meningkatkan standar dengan membuat tabel sementara menggunakan skrip di Listing 5.

-- Listing 5
use WideWorldImporters
go
select *
into [#Invoices]
from [Sales].[Invoices];
use tempdb
go
drop table [#Invoices];

Kami sekarang mendapatkan sejumlah besar halaman yang dialokasikan dan dicadangkan untuk sesi aktif kami 62 (lihat Gambar 8). Juga, perhatikan jumlah yang signifikan dari luasan yang dialokasikan dan halaman yang dicadangkan yang ditampilkan di sys.dm_db_file_space_usage (Gbr. 9).

Ketika kita melanjutkan dan menjatuhkan Temptable #Invoice, kita melihat bahwa halaman yang dialokasikan di TempDB dirilis seperti yang ditunjukkan pada Gambar. 12. Namun, output dari DMV dm_db_session_space_usage masih menunjukkan bahwa beberapa halaman dialokasikan ke sesi tersebut. Kami melihat bahwa ini dirilis segera setelah kami menutup sesi (ID sesi 62).

Selanjutnya, kami membuka sesi lain dan membuat indeks menggunakan kueri di Listing 6. Dalam Kueri 1 mengecualikan opsi SORT_IN_TEMPDB dan di Kueri 2, kami menggunakan opsi ini setelah menjatuhkan indeks. Tidak ada alokasi signifikan yang terjadi untuk kasus pertama tetapi kami melihat beberapa perubahan saat menggunakan SORT_IN_TEMPDB. Perubahan ini sangat kecil mengingat ukuran indeks yang bersangkutan (lihat Gambar 16 dan 17).

Kami akan melakukan tes akhir. Kami menemukan bahwa hingga saat ini DMV seperti sys.dm_tran_active_snapshot_database_transactions dan sys.dm_tran_version_store tidak mengembalikan baris saat ditanyakan.

Mari aktifkan tingkat isolasi SNAPSHOT_ISOLATION dan READ_COMMITTED_SNAPSHOT (Daftar 7). Setelah selesai, satu pernyataan pembaruan membuat catatan di sys.dm_tran_version_store DMV. Menempatkan kueri yang sama ini adalah transaksi yang kami gunakan untuk melihat bahwa catatan juga dibuat di sys.dm_tran_active_snapshot_database_transactions selama transaksi.

-- Listing 7
ALTER DATABASE WideWorldImporters
SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE WideWorldImporters
SET READ_COMMITTED_SNAPSHOT ON;
-- Listing 8
-- Query 1
 update [WideWorldImporters].[Sales].[Invoices]
 set DeliveryInstructions='Shop 50, 1476 Poddar Lane'
 where InvoiceID=48;
-- Query 2
-- Transaction
BEGIN TRAN
 update [WideWorldImporters].[Sales].[Invoices]
 set DeliveryInstructions='Shop 50, 1476 Poddar Lane'
 where InvoiceID=48;
 WAITFOR DELAY '00:00:30';
COMMIT TRAN;
GO

Kesimpulan

Kami telah menjelajahi secara singkat bahwa kami dapat memantau aktivitas TempDB menggunakan lima DMV utama yang diekspos oleh SQL Server. Saat menggunakan tingkat proses pemantauan ini di lingkungan produksi, kami dapat menentukan apakah kami memerlukan lebih banyak ruang di TempDB dan file data. Selain itu, kami dapat menganalisis dampak isolasi SNAPSHOT jika kami telah mengaktifkan fitur ini sebelumnya.

Data keluaran DMV ini juga dapat membantu dalam menunjukkan dengan jelas kepada pengembang aplikasi dampak dari perilaku kode mereka pada tempDB dan instans secara keseluruhan. Secara keseluruhan, cukup bermanfaat untuk memahami penggunaan DMV ini sebagai DBA yang berkaitan dengan kinerja dan manajemen ruang.

Referensi

Isolasi Snapshot di SQL Server
Menggunakan Beberapa Kumpulan Hasil Aktif
Deskripsi sys.dm_tran_version_store
Deskripsi sys.dm_db_task_space_usage
Deskripsi sys.dm_file_space_usage
Deskripsi_spaced_usagesdm_sys.
Deskripsi sys.dm_tran_active_snapshot_database_transactions


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EF5:Tidak dapat melampirkan file '{0}' sebagai database '{1}'

  2. 3 Cara Mendapatkan Nama Bulan dari Tanggal di SQL Server (T-SQL)

  3. Menghapus Profil Email Database (SSMS)

  4. Bagaimana cara membuat tampilan terwujud di SQL Server?

  5. Membuat, tidak merusak, kinerja SQL Server