Mendirikan:
- Windows Server 2008 R2
- SQL Server 2008 R2 SP1
- RAM 240GB
- TempDB adalah file data 8x16GB tanpa tumbuh otomatis (total 128GB)
- Server Fisik / Stand-alone
Server ini digunakan untuk pemrosesan ETL. Kami baru saja menginstal lebih banyak RAM di server ini untuk total 240GB RAM. Layanan SQL Server adalah satu-satunya hal nyata yang berjalan.
Memori muncul dengan baik di BIOS, OpenManage dan Windows.
Jika saya mengkonfigurasi SQL Server untuk menggunakan memori Min / Max 70 / 100GB, kami tidak memiliki masalah. Namun, begitu saya meningkatkannya menjadi 120 / 150GB, saya mendapatkan kesalahan berikut ketika saya menjalankan salah satu proses ETL kami:
Tidak dapat mengalokasikan ruang untuk objek '<objek sistem sementara: 422234507706368>' dalam database 'tempdb' karena filegroup 'PRIMER' sudah penuh. Buat ruang disk dengan menghapus file yang tidak dibutuhkan, menjatuhkan objek di filegroup, menambahkan file tambahan ke filegroup, atau mengatur autogrowth untuk file yang ada di filegroup. (Msg 1105, Status 2, Prosedur Tidak Diketahui, Baris 1)
Kami belum pernah mengalami masalah ini sebelum mengubah konfigurasi memori. Setelah mengkonfigurasi ulang kembali ke aslinya 70 / 100GB, kami tidak menerima kesalahan ini.
Hal yang sudah saya coba:
- Atur file data TempDB ke tumbuh otomatis. Ini hanya menghasilkan file tumbuh otomatis sampai kapasitas disk tercapai dan kemudian gagal.
- Tambahkan lebih banyak file data TempDB. Kesalahan yang sama seperti yang ditunjukkan.
- Tambah ukuran TempDB ke 8x32GB (total 256GB)
Saya bingung apa yang bisa menyebabkan masalah ini.
sumber
Jawaban:
Terimakasih untuk semua orang atas bantuannya.
Setelah menuangkan beberapa rencana eksekusi, ternyata ada GABUNG yang sedang diproses secara berbeda berdasarkan jumlah RAM yang tersedia. Dengan lebih sedikit RAM, ia mengevaluasinya dengan Hash; dengan lebih banyak RAM, ia menggunakan serangkaian Gabung Bergabung.
Jadi pada dasarnya itu datang ke T-SQL yang ditulis dengan buruk, yang saat ini saya refactoring.
sumber
Ini bukan jawaban untuk pertanyaan, hanya beberapa kode yang tidak ingin saya poskan dalam komentar. Untuk melihat keseimbangan penjadwal dan memori Anda di seluruh NUMA node (dan juga untuk melihat apakah ada node yang tidak terlihat online):
(Dalam SQL Server 2012, yang terakhir
SUM
seharusnyaSUM(pages_kb)
karena tidak ada lagi pengalokasi halaman tunggal dan multi-halaman.)sumber