Maaf lama, tapi saya ingin memberi Anda informasi sebanyak mungkin sehingga mungkin berguna untuk analisis.
Saya tahu ada beberapa posting dengan masalah serupa, namun saya sudah mengikuti berbagai posting dan informasi lain yang tersedia di web, tetapi masalahnya tetap ada.
Saya memiliki masalah kinerja serius dalam SQL Server yang membuat pengguna gila. Masalah ini berlanjut selama beberapa tahun, dan sampai akhir 2016 dikelola oleh entitas lain dan mulai 2017 dikelola oleh saya.
Di pertengahan tahun 2017, saya dapat menyelesaikan masalah dengan mengikuti petunjuk pengindeksan yang ditunjukkan oleh Laporan Dashboard Kinerja Microsoft SQL Server 2012. Efeknya langsung, itu terdengar seperti sihir. Prosesor yang ada di hari-hari terakhir hampir selalu di 100%, menjadi super tenang dan umpan balik dari pengguna bergema. Bahkan teknisi ERP kami senang, karena biasanya butuh 20 menit untuk mendapatkan daftar tertentu dan akhirnya dia bisa melakukannya dalam hitungan detik.
Namun seiring waktu, perlahan-lahan mulai memburuk. Saya menghindari membuat lebih banyak indeks, karena khawatir terlalu banyak indeks akan memperburuk kinerja. Tetapi pada titik tertentu saya harus menghapus yang tidak digunakan dan membuat yang baru yang disarankan Dashboard Kinerja kepada saya. Namun tidak berdampak.
Kelambanan yang dirasakan pada dasarnya adalah saat menabung dan berkonsultasi, dalam ERP.
Saya memiliki Windows Server 2012 R2 yang didedikasikan untuk SQL Server 2016 Enterprise (64-bit) dengan konfigurasi berikut:
- CPU: Intel Xeon CPU E5-2650 v3 @ 2.30GHz
- Memori: 84 GB
- Dalam hal penyimpanan, server memiliki volume yang didedikasikan untuk sistem operasi, yang lain didedikasikan untuk data dan yang lain didedikasikan untuk log.
- 17 basis data
- Pengguna:
- Dalam DB terbesar terhubung kurang lebih 113 pengguna secara bersamaan
- Di lain ada sekitar 9 pengguna
- Dalam dua dari mereka adalah 3 + 3
- Sisanya masing-masing hanya memiliki 1 pengguna
- Kami memiliki web yang juga menulis untuk database yang lebih besar, tetapi di mana penggunaannya jauh lebih jarang, dan yang seharusnya memiliki sekitar 20 pengguna.
- Ukuran DB:
- Basis data terbesar memiliki 290 GB
- Terbesar kedua memiliki 100GB
- Terbesar ketiga memiliki 20 GB
- Keempat, 14 GB
- Sisanya masing-masing lebih dari 3 GB
Ini adalah contoh produksi, tetapi kami juga memiliki contoh pengembangan yang saya percaya dapat diabaikan untuk tujuan ini, karena sebagian besar waktu saya satu-satunya penghubung di sana, tetapi masalah ini terjadi terus-menerus, bahkan ketika saya tidak terhubung .
Prosesornya hampir selalu seperti ini:
Kami memiliki rutinitas yang berjalan pada malam hari (tidak bermasalah) dan beberapa yang berjalan pada siang hari.
Pengguna terhubung melalui Remote Desktop ke mesin lain yang dikonfigurasi oleh ODBC 32 untuk mengakses SQL Server.
Datacenter tempat server berada memiliki 100/100 Mbps, serta keberadaan saya. Sebagian besar situs ditautkan oleh MPLS dan lainnya oleh IPSec (dari FO ke 4G). Penyedia membuat banyak analisis dan rangkaian ok.
Rasio Hit Cache adalah 99% (Permintaan Pengguna dan Sesi Pengguna)
Menunggu terlihat seperti ini:
Saya sudah mengumpulkan data dengan Perfmon dan saya mendapatkan hasilnya jika itu membantu analisis Anda - secara pribadi, saya tidak mendapatkan kesimpulan dari analisis tersebut.
Saya mengandalkan dukungan Anda dalam menyelesaikan masalah ini, tersedia untuk memberikan informasi yang Anda anggap perlu untuk resolusi tersebut.
Terima kasih banyak.
Inilah markdown sp_blitz (Saya mengganti nama perusahaan dengan nama samaran):
Prioritas 1: Keandalan :
CHECKDB DBCC baik terakhir lebih dari 2 minggu
- menguasai
model - Terakhir berhasil CHECKDB: 2018-02-07 15: 04: 26.560
msdb - Terakhir berhasil CHECKDB: 2018-02-07 15: 04: 27.740
Prioritas 10: Kinerja :
CPU dengan jumlah core yang ganjil
Node 0 memiliki 5 core yang ditetapkan untuknya. Ini adalah konfigurasi NUMA yang sangat buruk.
Node 1 memiliki 5 core yang ditugaskan untuk itu. Ini adalah konfigurasi NUMA yang sangat buruk.
Prioritas 20: Konfigurasi File :
- TempDB on C Drive tempdb - Database tempdb memiliki file di drive C. TempDB sering tumbuh tak terduga, menempatkan server Anda dalam risiko kehabisan ruang drive C dan menabrak keras. C juga sering jauh lebih lambat daripada drive lain, sehingga kinerjanya mungkin menurun.
Prioritas 50: Keandalan :
- Kesalahan yang Dicatat Baru-Baru Ini di Jejak Default
- master - 2018-03-07 08: 43: 11.72 Logon Error: 17892, Severity: 20, State: 1. 2018-03-07 08: 43: 11.72 Logon Logon gagal login 'example_user' karena memicu eksekusi. [KLIEN: IPADDR]
(catatan: banyak kesalahan seperti ini karena pemicu aktif yang membatasi sesi pengguna - untuk kontrol penggunaan lisensi ERP)
Verifikasi Halaman Tidak Optimal
DATABASE_A - Database [DATABASE_A] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_B - Database [DATABASE_B] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_C - Database [DATABASE_C] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_D - Database [DATABASE_D] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_E - Database [DATABASE_E] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_F - Database [DATABASE_F] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_G - Database [DATABASE_G] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_H - Database [DATABASE_H] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_I - Database [DATABASE_I] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_Z - Database [DATABASE_Z] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_K - Database [DATABASE_K] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_J - Database [DATABASE_J] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_L - Database [DATABASE_L] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_M - Database [DATABASE_M] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_O - Database [DATABASE_O] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_P - Database [DATABASE_P] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_Q - Database [DATABASE_Q] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_R - Database [DATABASE_R] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_S - Database [DATABASE_S] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_T - Database [DATABASE_T] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_U - Database [DATABASE_U] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_V - Database [DATABASE_V] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
DATABASE_X - Database [DATABASE_X] tidak memiliki NONE untuk verifikasi halaman. SQL Server mungkin lebih sulit mengenali dan memulihkan dari korupsi penyimpanan. Pertimbangkan untuk menggunakan CHECKSUM sebagai gantinya.
Remote DAC Disabled - Akses jarak jauh ke Dedicated Admin Connection (DAC) tidak diaktifkan. DAC dapat membuat pemecahan masalah jarak jauh lebih mudah ketika SQL Server tidak responsif.
Prioritas 50: Info Server :
- Inisialisasi File Instan Tidak Diaktifkan - Pertimbangkan untuk mengaktifkan IFI untuk mengembalikan lebih cepat dan pertumbuhan file data.
Prioritas 100: Kinerja :
Isi Faktor yang Diubah
DATABASE_A - Database [DATABASE_A] memiliki 417 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_B - Database [DATABASE_B] memiliki 318 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_C - Database [DATABASE_C] memiliki 346 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_D - Database [DATABASE_D] memiliki 663 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_E - Database [DATABASE_E] memiliki 335 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_F - Database [DATABASE_F] memiliki 1705 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_G - Database [DATABASE_G] memiliki 671 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_H - Database [DATABASE_H] memiliki 2364 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_I - Database [DATABASE_I] memiliki 1658 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_Z - Database [DATABASE_Z] memiliki 673 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_K - Database [DATABASE_K] memiliki 312 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_J - Database [DATABASE_J] memiliki 864 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_L - Database [DATABASE_L] memiliki 1170 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_M - Database [DATABASE_M] memiliki 382 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_O - Database [DATABASE_O] memiliki 356 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
msdb - Database [msdb] memiliki 8 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_P - Database [DATABASE_P] memiliki 291 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_Q - Database [DATABASE_Q] memiliki 343 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_R - Database [DATABASE_R] memiliki 2048 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_S - Database [DATABASE_S] memiliki 325 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_T - Database [DATABASE_T] memiliki 322 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_U - Database [DATABASE_U] memiliki 351 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_V - Database [DATABASE_V] memiliki 312 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
DATABASE_X - Database [DATABASE_X] memiliki 352 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
tempdb - Database [tempdb] memiliki 2 objek dengan fill factor = 70%. Ini dapat menyebabkan masalah kinerja memori dan penyimpanan, tetapi juga dapat mencegah pemisahan halaman.
Banyak Paket untuk Satu Permintaan - 20763 paket tersedia untuk satu permintaan dalam cache paket - artinya kita mungkin memiliki masalah parameterisasi.
Pemicu Server Diaktifkan - Pemicu Server [connection_limit_trigger] diaktifkan. Pastikan Anda memahami apa yang dilakukan pemicu itu - semakin sedikit kerjanya, semakin baik.
Prosedur Tersimpan DENGAN RECOMPILE
master - [master]. [dbo]. [sp_AllNightLog] telah DENGAN RECOMPILE dalam kode prosedur yang tersimpan, yang dapat menyebabkan peningkatan penggunaan CPU karena rekompilasi kode yang konstan.
master - [master]. [dbo]. [sp_AllNightLog_Setup] telah DENGAN RECOMPILE dalam kode prosedur yang tersimpan, yang dapat menyebabkan peningkatan penggunaan CPU karena terus-menerus mengkompilasi ulang kode.
Prioritas 110: Kinerja :
Tabel Aktif Tanpa Indeks Clustered
DATABASE_A - Basis data [DATABASE_A] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanyakan secara aktif.
DATABASE_B - Basis data [DATABASE_B] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_C - Basis data [DATABASE_C] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_E - Basis data [DATABASE_E] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_F - Basis data [DATABASE_F] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_H - Database [DATABASE_H] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_I - Database [DATABASE_I] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_K - Basis data [DATABASE_K] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_O - Database [DATABASE_O] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_Q - Database [DATABASE_Q] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_S - Basis data [DATABASE_S] memiliki banyak - tabel tanpa indeks berkerumun - yang sedang ditanyakan secara aktif.
DATABASE_T - Database [DATABASE_T] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_U - Basis data [DATABASE_U] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_V - Basis data [DATABASE_V] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanya secara aktif.
DATABASE_X - Basis data [DATABASE_X] memiliki tumpukan - tabel tanpa indeks berkerumun - yang sedang ditanyakan secara aktif.
Prioritas 150: Kinerja :
(Catatan: Nasihat Nany di sini, tetapi saya tidak dapat memasukkannya karena keterbatasan karakter. Jika ada cara lain untuk berbagi, harap sebutkan.)