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

Perbarui statistik SQL Server menggunakan rencana pemeliharaan basis data

Pencadangan basis data, pemeriksaan integritas, dan pengoptimalan kinerja adalah tugas reguler inti DBA. Data klien sangat penting bagi DBA untuk mengelola backup database dan memastikan integritas backup. Jadi, jika ada yang tidak beres dengan database produksi, itu dapat dipulihkan dengan waktu henti minimum. Pemeriksaan integritas basis data juga penting karena, dalam kasus korupsi basis data, dapat diperbaiki dengan waktu henti minimum dan kehilangan data. Mengelola kinerja database juga penting. Mengelola kinerja database adalah kombinasi dari beberapa tugas.

  1. Identifikasi daftar kueri intensif sumber daya dan bantu pengembang untuk menulis ulang.
  2. Membuat dan mengelola indeks pada tabel. Selain itu, lakukan defragmentasi indeks untuk memastikannya tetap dalam kondisi yang baik.
  3. Terakhir, mengelola statistik tabel.

Dalam artikel saya sebelumnya, saya membahas topik Statistik pembuatan otomatis dan Statistik Pembaruan Otomatis dan bagaimana keduanya dapat membantu meningkatkan kinerja. Dalam artikel ini, saya akan menjelaskan cara membuat dan menjadwalkan rencana pemeliharaan untuk memperbarui statistik.

Pertama, izinkan saya menjelaskan apa itu statistik SQL Server dan bagaimana statistik tersebut dapat membantu meningkatkan kinerja server SQL.

Statistik SQL Server dan kepentingannya

Statistik adalah metadata yang digunakan oleh pengoptimal kueri SQL Server, yang membantu menentukan cara terbaik untuk mengambil data. Pengoptimal menggunakan statistik untuk memahami data, distribusinya, dan jumlah baris yang kemungkinan dihasilkan oleh kueri tertentu dari statistik yang tersedia. Berdasarkan informasi ini, ia memutuskan jalur akses data yang optimal. Ini juga menentukan apakah akan melakukan pemindaian tabel atau pencarian indeks, menggunakan gabungan loop bersarang atau gabungan hash, dll.

Jika statistik kedaluwarsa, atau jika tidak tersedia, pengoptimal dapat memilih rencana eksekusi yang buruk, yang mengurangi kinerja kueri secara signifikan. SQL Server dapat secara otomatis memelihara statistik dan menyegarkannya berdasarkan pelacakan modifikasi datanya.

Statistik dapat dibuat dan diperbarui secara otomatis dengan mengaktifkan “Auto Create Statistics” dan “Auto Update Statistics.” Namun, untuk beberapa tabel, seperti tabel yang mengalami perubahan signifikan dalam distribusi data, ada kemungkinan bahwa pembaruan statistik otomatis SQL Server tidak akan cukup untuk mempertahankan kinerja kueri tingkat tinggi secara konsisten.

Sebelum saya menjelaskan berbagai pendekatan untuk memperbarui statistik, izinkan saya menjelaskan berbagai cara untuk meninjau statistik yang dibuat pada tabel apa pun.

Cara meninjau statistik

Kita dapat melihat statistik kolom dan statistik indeks

  1. Menggunakan SQL Server Management Studio.
  2. Menggunakan prosedur tersimpan Sistem dan katalog sistem serta tampilan manajemen dinamis

Melihat Statistik menggunakan SQL Server Management Studio

Misalnya, saya ingin melihat statistik yang dibuat di [Sumber Daya Manusia].[Karyawan] tabel dibuat di AdventureWorks2017 basis data. Untuk melakukannya, luncurkan SQL Server Management Studio. Kemudian luaskan AdventureWorks2017 basis data, perluas [Sumber Daya Manusia].[Karyawan] meja. Lihat gambar berikut:

Menggunakan prosedur tersimpan Sistem dan tampilan manajemen dinamis

Jika Anda menggunakan versi SQL Server yang lebih lama, Anda dapat menggunakan sp_helpstats prosedur sistem untuk meninjau statistik tabel. sp_helpstats akan menampilkan statistik, yang dibuat oleh SQL Server atau oleh pengguna. Ini tidak akan menampilkan statistik yang dibuat oleh Index. Untuk menunjukkannya, saya telah membuat statistik bernama User_Statistics_BirthDate di [Sumber Daya Manusia].[Karyawan] tabel.

Berikut ini contohnya:

USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

Berikut adalah outputnya.

Anda dapat meninjau statistik dengan menanyakan sys.stats katalog sistem. Ini memberikan informasi tentang statistik yang dibuat oleh SQL Server, Dibuat oleh Indeks dan dibuat oleh pengguna.

Jalankan kueri berikut:

SELECT NAME         AS 'STATISTICS NAME', 
       AUTO_CREATED AS 'CREATED AUTOMATICALLY', 
       USER_CREATED AS 'CREATED BY USER' 
FROM   SYS.STATS 
WHERE  OBJECT_ID = OBJECT_ID('HUMANRESOURCES.EMPLOYEE')

Berikut adalah outputnya:

Sekarang, mari gabungkan tabel ini dengan katalog sistem lain untuk mendapatkan informasi mendetail tentang statistik. Untuk melakukannya, jalankan kueri berikut:

SELECT [SCHEMAS].[NAME] + '.' + [OBJECTS].[NAME] AS [TABLE_NAME], 
       [INDEXES].[INDEX_ID]                      AS [INDEX ID], 
       [STATS].[NAME]                            AS [STATISTIC], 
       STUFF((SELECT ', ' + [COLUMNS].[NAME] 
              FROM   [SYS].[STATS_COLUMNS] [STATS_COLUMN] 
                     JOIN [SYS].[COLUMNS] [COLUMNS] 
                       ON [COLUMNS].[COLUMN_ID] = [STATS_COLUMN].[COLUMN_ID] 
                          AND [COLUMNS].[OBJECT_ID] = [STATS_COLUMN].[OBJECT_ID] 
              WHERE  [STATS_COLUMN].[OBJECT_ID] = [STATS].[OBJECT_ID] 
                     AND [STATS_COLUMN].[STATS_ID] = [STATS].[STATS_ID] 
              ORDER  BY [STATS_COLUMN].[STATS_COLUMN_ID] 
              FOR XML PATH('')), 1, 2, '')       AS [COLUMNS_IN_STATISTIC] 
FROM   [SYS].[STATS] [STATS] 
       JOIN [SYS].[OBJECTS] AS [OBJECTS] 
         ON [STATS].[OBJECT_ID] = [OBJECTS].[OBJECT_ID] 
       JOIN [SYS].[SCHEMAS] AS [SCHEMAS] 
         ON [OBJECTS].[SCHEMA_ID] = [SCHEMAS].[SCHEMA_ID] 
       LEFT OUTER JOIN [SYS].[INDEXES] AS [INDEXES] 
                    ON [OBJECTS].[OBJECT_ID] = [INDEXES].[OBJECT_ID] 
                       AND [STATS].[NAME] = [INDEXES].[NAME] 
WHERE  [OBJECTS].[OBJECT_ID] = OBJECT_ID(N'HUMANRESOURCES.EMPLOYEE') 
ORDER  BY [STATS].[USER_CREATED] 

GO

Kueri di atas mengisi detail berikut

  1. Tabel tempat statistik dibuat.
  2. ID Indeks.
  3. Nama Statistik.
  4. Kolom termasuk dalam statistik.

Berikut adalah outputnya:

Di bagian selanjutnya, saya akan menjelaskan berbagai cara untuk memperbarui statistik.

Pendekatan yang berbeda untuk pembaruan statistik

Kami dapat memperbarui statistik dengan cara berikut:

  1. Buat rencana pemeliharaan SQL Server.
  2. Buat Menggunakan skrip khusus.
  3. Jalankan perintah statistik pembaruan secara manual pada tabel individual.

Pertama, saya akan menjelaskan bagaimana kita dapat membuat rencana pemeliharaan untuk memperbarui statistik.

Buat Rencana Pemeliharaan SQL Server untuk Memperbarui Statistik

Sekarang, dalam demo ini, kami akan membuat rencana pemeliharaan statistik pembaruan untuk memperbarui statistik. Rencana pemeliharaan akan melakukan tugas-tugas berikut:

Pertama Buat rencana pemeliharaan. Untuk melakukannya, buka SQL Server Management Studio. Perluas contoh server SQL>> Folder manajemen>> Di bawah Manajemen, klik kanan MaintenancePplans, dan pilih New Maintenance Plan. Lihat gambar berikut:

Rencana Pemeliharaan Baru kotak dialog terbuka. Di dalam kotak, berikan nama rencana pemeliharaan, dan klik OK. Lihat gambar berikut:

Desainer rencana pemeliharaan terbuka. Di kotak alat perancang rencana pemeliharaan, seret dan lepas "Perbarui Tugas Statistik" di jendela perancang. Lihat gambar berikut:

Sekarang klik dua kali Perbarui Tugas Statistik . Tugas Pembaruan Statistik kotak dialog terbuka. Di kotak dialog, ada opsi yang dapat digunakan untuk menyesuaikan rencana pemeliharaan. Lihat gambar berikut:

Kami dapat menyesuaikan opsi berikut untuk menggunakan Update statistik Rencana pemeliharaan.

  1. Memperbarui statistik semua objek dari database tertentu. Lihat gambar berikut:
  2. Objek tertentu dari database yang dipilih. Anda dapat memperbarui statistik Semua Tabel dan Tampilan / Tabel dan tampilan tertentu. Lihat gambar berikut:

    Jika kita memilih Tabel atau Tampilan maka SQL akan mengisi nama tampilan atau tabel yang di seleksi kotak dialog. Lihat gambar berikut:
  3. Opsi ketiga adalah Perbarui . Kita dapat memperbarui semua statistik tabel/tampilan, atau kita dapat memilih untuk memperbarui hanya statistik kolom (statistik dibuat pada kolom yang tidak diindeks), atau kita dapat memilih hanya Statistik indeks (statistik yang dibuat oleh indeks). Lihat gambar berikut:
  4. Kami juga dapat memilih jenis pemindaian statistik apa pun. Kita dapat memilih Pindai Penuh atau Contoh menurut persentase tertentu atau baris tertentu. Lihat gambar berikut:

Sekarang, seperti yang saya sebutkan, kita akan membuat tugas pemeliharaan yang akan memperbarui statistik semua tabel dalam AdventureWorks2017 database dengan scan penuh. Jadi, pilih opsi yang sesuai. Setelah tugas pemeliharaan dikonfigurasi, akan terlihat seperti berikut:

Setelah tugas pemeliharaan dikonfigurasi dengan benar, tutup dialog statistik pembaruan. Setelah konfigurasi, rencana pemeliharaan terlihat seperti berikut:

Setelah rencana Pemeliharaan dibuat, mari kita jadwalkan rencana pemeliharaan. Untuk melakukannya, klik ikon kalender di seberang Deskripsi kolom. Lihat gambar berikut:

Setelah Anda mengklik tombol kalender, kotak dialog untuk mengonfigurasi jadwal pekerjaan akan terbuka. Lihat gambar berikut:

Seperti yang saya sebutkan, rencana pemeliharaan statistik pembaruan kami akan dijalankan setiap hari Minggu pukul 4:00 pagi. Jadi kami akan mengkonfigurasi jadwal pekerjaan yang sesuai. Penjadwalan pekerjaan sangat mudah. Setelah Anda mengonfigurasi jadwal, kotak dialog akan terlihat seperti berikut:

Setelah jadwal eksekusi dikonfigurasi, seluruh rencana pemeliharaan terlihat seperti gambar berikut. Simpan rencana pemeliharaan dan tutup jendela.

Sekarang, mari kita jalankan rencana pemeliharaan ini dengan menjalankan SQL Job yang dibuat oleh rencana pemeliharaan. Untuk membuka Pekerjaan SQL, perluas Agen SQL Server dan perluas Pekerjaan . Anda dapat melihat Pekerjaan SQL yang dibuat oleh rencana pemeliharaan SQL. Sekarang untuk menjalankan tugas, klik kanan Perbarui Statistik Mingguan.Mingguan.Subplan_1 dan klik Mulai Pekerjaan di Langkah . Lihat gambar berikut.

Setelah pekerjaan selesai, Anda dapat melihat kotak dialog Eksekusi pekerjaan yang berhasil berikut ini.

Ringkasan

Dalam artikel ini, saya telah membahas:

  1. Penjelasan mendetail tentang Statistik SQL Server dan kepentingannya.
  2. Opsi berbeda untuk memperbarui statistik.
  3. Contoh kerja pembuatan rencana Pemeliharaan SQL untuk memperbarui statistik.

Dalam artikel saya berikutnya, saya akan menjelaskan berbagai perintah T-SQL untuk memperbarui statistik. Selain itu, saya akan menjelaskan Script T-SQL yang akan memperbarui statistik berdasarkan volume perubahan data yang terjadi setelah insert/update/delete terjadi pada tabel.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Melarikan diri dari kutipan tunggal di SQL Server

  2. Cara Memformat Tanggal &Waktu di SQL Server

  3. Mengapa join kiri t-sql saya tidak berfungsi?

  4. Cara Mengembalikan Jumlah Baris dalam Hasil Query di SQL Server

  5. Ikhtisar Quests Layanan Pemantauan Database Terbaru - Spotlight Cloud