Apakah batas SQL Server Express memori dan CPU per instance?

32

Jika saya memiliki 8GB RAM di server dan saya menjalankan 4 contoh SQL Server Express, akankah batas total memori yang digunakan oleh SQL Server adalah 1GB atau 4GB?

Apakah disarankan untuk menjalankan beberapa instance seperti ini agar setiap database dapat menggunakan sumber daya dengan lebih baik (dengan asumsi server memiliki banyak sumber daya)?

wizzardmr42
sumber

Jawaban:

27

Jika saya memiliki 8GB RAM di server dan saya menjalankan 4 contoh SQL Express, akankah batas total memori yang digunakan oleh SQL Server adalah 1GB atau 4GB?

Setiap instance dapat menggunakan memori hingga 1GB untuk buffer pool . Setiap instance dapat menggunakan sedikit lebih dari 1GB total karena tidak semua alokasi memori melalui kolam buffer. Dalam kasus Anda, memori maksimum yang digunakan oleh empat instance untuk buffer pool adalah 4GB.

Ekstrak BOL

Untuk mengkonfirmasi, saya mulai dua contoh dari SQL Server 2008 Express Database Engine, melakukan beberapa aktivitas untuk memuat kumpulan buffer (terpisah), dan kemudian melihat pemanfaatan memori per-instance dalam beberapa cara, misalnya menggunakan DBCC MEMORYSTATUS atau dengan menghitung jumlah buffer menggunakan DMV sys.dm_os_buffer_descriptors .

Nomor penggunaan memori fisik di bawah ini diperoleh menggunakan kueri simultan terhadap sistem DMV sys.dm_os_process_memory pada setiap instance dari mesin database:

SELECT 
    dopm.physical_memory_in_use_kb 
FROM sys.dm_os_process_memory AS dopm;

Keluaran:

╔═══════════╦═══════════╗
 Instance1  Instance2 
╠═══════════╬═══════════╣
   1102872    1059812 
╚═══════════╩═══════════╝

Masing-masingnya sedikit lebih dari 1GB karena total penggunaan memori fisik mencakup lebih dari sekedar penggunaan buffer pool, seperti yang disebutkan sebelumnya.

Apakah disarankan untuk menjalankan beberapa instance seperti ini agar setiap database dapat menggunakan sumber daya dengan lebih baik (dengan asumsi server memiliki banyak sumber daya)?

Jika database pada setiap instance berfungsi secara independen maka setidaknya dapat dijalankan untuk menjalankan beberapa instance Express dengan cara ini, meskipun Anda perlu memperhatikan konfigurasi dan pemeliharaan mungkin dibuat lebih kompleks.

Anda mungkin lebih baik dilayani menggunakan edisi lain, seperti Edisi Pengembang berfitur lengkap (dan sangat murah), jika penggunaan yang dimaksudkan cocok dengan lisensi). Anda perlu mengatakan lebih banyak tentang keadaan untuk mendapatkan jawaban yang jelas tentang hal ini.

Paul White mengatakan GoFundMonica
sumber
3
Juga perlu diperhatikan, bagi pembaca yang cerdik: SQL Server Database Enginesarana A Single Instance. Setiap kali Anda harus mengubah server dialog koneksi yang Anda hubungkan (misalnya localhost\devvs localhost\test) itu "Mesin Virtual" baru atau "Mesin" baru. Saya pikir saya akan menjernihkannya.
jcolebrand
7

Setiap Mesin Virtual menghitung terpisah karena memiliki proses terpisah.

TomTom
sumber
1
Saya berasumsi bahwa Anda yakin bahwa limiter tidak diterapkan di semua proses?
-8

Dalam SQL Express, mesin database hanya dapat mengkonsumsi 1 GB RAM , dan DB apa pun tidak boleh lebih besar dari 10 GB.

Jadi, 4 instance masih harus berbagi 1 GB RAM.

Anda dapat mengetahui lebih banyak di http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx .

Diskusi serupa di sini di Stack Overflow mengatakan ini adalah jawaban yang tepat BTW, jadi tidak perlu downvote: https://stackoverflow.com/questions/1169634/limitations-of-sql-server-express

Halaman ini mengatakan hal yang sama, meskipun ini tentang SQL Server Express 2005: http://www.edugeek.net/forums/windows-server-2000-2003/55183-sql-server-express-2005-memory-limit- per-instance.html

Komunitas
sumber
3
Tidak harus mengikuti - apakah itu 1 engine per server atau per instance?
1
OK, itu memang menyiratkannya, tetapi mungkin juga mereka melewatkannya di garis batas memori.
1
Hanya karena ada di internet, itu pasti benar. Mereka tidak akan pernah membiarkan sesuatu yang salah terjadi di internet. ~ Mengatakan bahwa untuk mengatakan bahwa masalah di sini adalah bahwa harus ada proses manajemen atau sesuatu yang dimasukkan ke dalam OS untuk tujuan membatasi semua SQL Express selamanya. Saya benar-benar tidak berpikir itu telah terjadi (AKA sama sekali tidak terjadi, berdasarkan fakta bahwa saya menghirup oksigen dan dapat mengikuti logika dengan sangat baik) sehingga faktanya adalah prosesnya sendiri mengatur jumlah RAM yang sedang bekas.
jcolebrand
2
Meminta orang untuk menghapus downvotes pada apa yang secara alami jawaban yang buruk tidak mungkin membuat Anda mendapatkan upvotes, terlepas dari sumber apa yang Anda kutip. Jika Anda benar-benar ingin mengutip sumber, buka memuat beberapa contoh dan tunjukkan memuat aktualnya dalam memori. Itu satu-satunya cara untuk mengetahui dengan pasti. Entah itu, atau tunjukkan kami kode Microsoft yang mengatur perilaku SQL Express. Itu selalu manajemen per instance, karena setiap layanan mandiri dari atas ke bawah. Semua layanan manajemen bekerja di atas pelabuhan.
jcolebrand
2
Maximum memory utilized (SQL Server Database Engine)Perhatikan bagaimana mereka menggunakan terminologi yang sama di sana seperti yang mereka lakukan di telepon: Maximum Compute Capacity Used by a Single Instance (SQL Server Database Engine)1(bagi mereka yang bermain di rumah, intinya adalah bahwa mereka memiliki ukuran yang sama) msdn.microsoft.com/en-us/library/… dan saya juga suka bagaimana jawaban pada SO yang ditautkan adalah SALAH SALAH SALAH. Mulai dengan "1 inti atau 4 soket", editor bahkan tidak dapat menyalin-menempel dengan benar.
jcolebrand