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

Bantuan pemecahan masalah SqlException:Timeout kedaluwarsa pada koneksi, dalam situasi tanpa beban

Memori Tidak Cukup

Ini sangat mungkin merupakan masalah memori, mungkin diperburuk atau dipicu oleh hal-hal lain, tetapi pada dasarnya masih merupakan masalah memori. ada dua kemungkinan lain (kurang mungkin), yang harus Anda periksa dan hilangkan terlebih dahulu (karena mudah untuk melakukannya):

Mudah Untuk Memeriksa Kemungkinan:

  1. Anda mungkin mengaktifkan "Tutup Otomatis":Tutup Otomatis dapat memiliki perilaku ini, namun jarang untuk mengaktifkannya. Untuk memeriksa ini, di SSMS klik kanan pada database aplikasi Anda, pilih "Properties", lalu pilih panel "Options". Lihat entri "Tutup Otomatis" dan pastikan itu disetel ke False. Periksa tempdb juga.

  2. Pekerjaan Agen SQL mungkin menyebabkannya:Periksa Log Riwayat Agen untuk melihat apakah ada pekerjaan yang berjalan secara konsisten selama acara. Ingatlah untuk memeriksa pekerjaan pemeliharaan juga, karena hal-hal seperti Membangun Kembali Indeks sering disebut sebagai masalah kinerja saat sedang berjalan. Ini bukan kandidat yang mungkin sekarang, hanya karena mereka biasanya tidak akan terpengaruh oleh Profiler.

Mengapa Sepertinya Masalah Memori:

Jika itu tidak menunjukkan apa-apa, maka Anda harus memeriksa masalah memori. Saya menduga Memori sebagai penyebab dalam kasus Anda karena:

  • Anda memiliki Memori 1 GB:Meskipun ini secara teknis di atas Minimum untuk SQL Server, ini jauh di bawah yang direkomendasikan untuk SQL Server, dan jauh di bawah apa yang menurut pengalaman saya dapat diterima untuk produksi, bahkan untuk server yang dimuat dengan ringan.

  • Anda menjalankan IIS dan SQL Server pada kotak yang sama:Ini tidak direkomendasikan dengan sendirinya, sebagian besar karena pertentangan untuk memori yang dihasilkan, tetapi dengan hanya 1 GB memori itu menghasilkan IIS, aplikasi, SQL Server, OS dan tugas dan/atau pemeliharaan lainnya semuanya berjuang untuk memori yang sangat sedikit. Cara Windows mengelola ini adalah dengan memberikan memori ke proses aktif dengan secara agresif mengambilnya dari proses non-aktif. Diperlukan waktu beberapa detik, atau bahkan menit untuk proses besar seperti SQL Server untuk mendapatkan kembali cukup memorinya agar dapat sepenuhnya melayani permintaan dalam situasi ini.

  • Profiler membuat 90% dari masalah hilang:Ini adalah petunjuk besar bahwa memori kemungkinan masalahnya, karena biasanya, hal-hal seperti Profiler memiliki efek yang persis seperti ini pada masalah khusus ini:tugas Profiler membuat SQL Server hanya sedikit sedikit aktif sepanjang waktu. Sering kali, ini adalah aktivitas yang cukup untuk menjauhkannya dari daftar "pemulung" OS, atau setidaknya sedikit mengurangi dampaknya.

Cara Memeriksa Memori sebagai Pelakunya:

  1. Matikan Profiler:Ini memiliki efek Heisenberg pada masalah, jadi Anda harus mematikannya atau Anda tidak akan dapat melihat masalahnya dengan andal.

  2. Jalankan Monitor Sistem (perfmon.exe) dari kotak lain, yang terhubung dari jarak jauh ke layanan pengumpulan kinerja di kotak yang menjalankan SQL Server dan IIS Anda. Anda dapat dengan mudah melakukan ini dengan terlebih dahulu menghapus tiga statistik default (hanya lokal), dan kemudian menambahkan statistik yang diperlukan (di bawah), tetapi pastikan untuk mengubah nama Komputer di drop-down pertama untuk terhubung ke SQL Anda kotak.

  3. Kirim data yang dikumpulkan ke file dengan membuat "Log Penghitung" di perfmon. Jika Anda tidak terbiasa dengan hal ini, maka hal termudah untuk dilakukan adalah mengumpulkan data ke dalam tab atau file yang dipisahkan koma yang dapat Anda buka dengan Excel untuk dianalisis.

  4. Siapkan kinerja Anda untuk mengumpulkan ke file dan tambahkan penghitung berikut ke dalamnya:

    -- Prosesor\%Waktu Prosesor[Total]

    -- PhysicalDisk\% Waktu Idle[untuk setiap disk ]

    -- PhysicalDisk\Rta. Panjang Antrian Disk[untuk setiap disk ]

    -- Memori\Halaman/detik

    -- Memori\Halaman Dibaca/dtk

    -- Memori\ MBytes yang Tersedia

    -- Antarmuka Jaringan\Bytes Total/detik[untuk setiap antarmuka yang digunakan ]

    -- Proses\% Waktu Prosesor[lihat di bawah ]

    -- Process\Page Faults/sec[lihat di bawah ]

    -- Process\Working Set [lihat di bawah ]

  5. Untuk penghitung Proses (di atas) Anda ingin menyertakan proses sqlserver.exe, proses IIS apa pun, dan proses aplikasi stabil apa pun. Perhatikan bahwa ini HANYA akan berfungsi untuk proses "stabil". Proses yang terus-menerus dibuat ulang sesuai kebutuhan, tidak dapat ditangkap dengan cara ini karena tidak ada cara untuk menentukannya sebelum ada.

  6. Jalankan koleksi ini ke file selama masalah paling sering terjadi. Atur interval pengumpulan ke sesuatu yang mendekati 10-15 detik. (ini mengumpulkan banyak data, tetapi Anda memerlukan resolusi ini untuk memilih peristiwa yang terpisah).

  7. Setelah Anda memiliki satu atau beberapa insiden, hentikan pengumpulan, lalu buka file data yang dikumpulkan dengan Excel. Anda mungkin harus memformat ulang kolom stempel waktu agar terlihat berguna dan menunjukkan jam menit dan detik. Gunakan log IIS Anda untuk menemukan waktu yang tepat dari insiden, lalu lihat data kinerja untuk melihat apa yang terjadi sebelum dan sesudah insiden. Secara khusus Anda ingin melihat apakah set kerjanya kecil sebelum dan sesudahnya besar, dengan banyak kesalahan halaman di antaranya. Itulah tanda paling jelas dari masalah ini.

SOLUSI:

Pisahkan IIS dan SQL Server ke dua kotak berbeda (lebih disukai) atau tambahkan lebih banyak memori ke kotak. Menurut saya minimal 3-4 GB.

Bagaimana dengan Barang EF yang Aneh itu?

Masalahnya di sini adalah kemungkinan besar itu adalah periferal atau hanya berkontribusi pada masalah utama Anda. Ingatlah bahwa Profiler membuat 90% insiden Anda hilang, jadi yang tersisa, mungkin menjadi masalah yang berbeda, atau mungkin hanya pengganggu yang paling ekstrim dari masalah. Karena perilakunya, saya menduga bahwa itu adalah siklus cache atau ada beberapa pemeliharaan latar belakang lain dari proses server aplikasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hapus semua spasi dari string di SQL Server

  2. Cara Tercepat untuk Menjalankan Kueri yang Sama Beberapa Kali di SQL Server

  3. Gabungkan Dua Partisi Menjadi Satu di SQL Server (T-SQL)

  4. Bagaimana cara menghapus dari beberapa tabel menggunakan INNER JOIN di SQL server

  5. SQL Server:Bagaimana cara memanggil fungsi yang ditentukan pengguna (UDF) di server tertaut?