Persyaratan MySQL Cluster RAM

8

Dari MySQL 5.1, data tidak perlu sepenuhnya dalam memori lagi.

Saya telah membaca bahwa kolom yang diindeks (saya pikir seluruh struktur indeks) masih harus ada di memori ( MySQL High Availability, 2010, hal 533 , "MySQL Cluster menyimpan semua kolom yang diindeks di memori utama" ).

Mengingat hal ini, apa yang terjadi jika TIDAK ada cukup memori (mis., Database besar (> 100GB, atau 1TB), berjalan pada server dengan konfigurasi memori rendah (2 node data, masing-masing dengan 1GB RAM, misalnya))?

GSB
sumber
Saya menanyakan hal ini karena saya ingin tahu tentang apa yang akan terjadi jika data node tidak memiliki cukup memori utama. Bukankah MySQL Cluster akan tetap menjadi bagian dari indeks di memori sekunder? Bagaimana jika saya tidak memiliki banyak RAM dan ukuran basis data saya sangat besar. Maka MySQL Cluster bukan pilihan bagi saya?
gsb

Jawaban:

4

MySQL Cluster mendukung penyimpanan kolom yang tidak diindeks pada disk-saja dengan cache LRU dari data yang baru diakses. Namun kolom yang diindeks selalu disimpan dalam memori.

MySQL Cluster mengalokasikan seluruh memori, sesuai dengan parameter DataMemory dan IndexMemory. Ini tidak akan meminta OS yang mendasari untuk lebih banyak memori secara dinamis.

Ini berarti Anda harus mengkonfigurasi cukup memori di seluruh cluster Anda untuk menampung semua kolom yang diindeks dalam memori. Jika dataset Anda cukup besar sehingga kolom yang diindeks lebih besar dari memori cluster yang tersedia, maka Anda tidak dapat memuat dataset tersebut ke dalam cluster. Pada titik tertentu Anda akan kehabisan ruang, dan transaksi memasukkan Anda akan dibatalkan.

Saat mengonfigurasikan DataMemory dan IndexMemory, yang terbaik adalah membatasi diri Anda menjadi sedikit kurang dari memori fisik di setiap sistem. Beberapa memori fisik harus disediakan untuk OS dan proses lainnya.

Secara teoritis MySQL Cluster dapat dikonfigurasi sehingga menggunakan memori virtual melalui perangkat swap (misalnya lebih dari memori fisik), tetapi sebagai jawaban lain menyatakan, ini bukan kasus yang dirancang untuk digunakan. Memiliki struktur di dalam memori yang ditukar ke disk biasanya kurang optimal karena pola akses acak di dalam memori menghasilkan akses acak ke disk, yang mengakibatkan swap meronta-ronta dan melambat di seluruh sistem. Dengan MySQL Cluster, hasil yang paling mungkin adalah gagal jantung dan kegagalan cluster karena pertukaran data tidak merespons sinyal dengan cukup cepat.

Untuk secara efisien mendukung indeks memori yang lebih besar daripada agregat, MySQL Cluster perlu mendukung format indeks pada disk (mungkin pohon B dll.) Dengan pola caching dan akses yang selaras dengan properti akses disk.

Clement Frazer
sumber
3

MySQL cluster dibangun di sekitar struktur indeks yang dioptimalkan untuk kesesuaian memori; sebuah T-tree . Ini berbeda dari mesin penyimpanan reguler Anda di MySQL yang menggunakan struktur B-tree atau B + tree , yang dapat bertahan cukup baik dari kehabisan memori dengan anggapan bahwa Anda memiliki beberapa hot-spot / akses tidak seragam (ini biasanya merupakan asumsi yang aman ).

Jika Anda ingin membangun semacam konsep pembuktian, tidak ada yang menghentikan Anda dari menggunakan sejumlah besar swap untuk mengimbangi kekurangan Anda. Perlu diketahui bahwa ini tidak akan berkinerja baik, dan Anda menggunakan produk untuk kasus penggunaan yang tidak dirancang untuknya.

Morgan Tocker
sumber
Jawaban Anda dan Frazer cukup bagus. Tapi karena dia sudah menjawab lebih dulu, aku akan memberinya kredit. Semoga kamu tidak keberatan. :)
gsb
Tidak, jangan pedulikan;) Frazer bekerja di cluster MySQL.
Morgan Tocker
2

Dalam terang ini, apa yang terjadi jika TIDAK ada cukup memori

Mungkin apa yang Anda harapkan jika tidak ada cukup memori. File akan dibuat di drive Anda dan Anda akan berlari secepat drive Anda memungkinkan.

Pastikan untuk membatasi MySQL dengan benar sehingga tidak menghabiskan semua memori Anda yang diperlukan untuk proses sistem lainnya.

Derek Downey
sumber
1

Pada dasarnya, sebuah rantai hanya sekuat link terlemahnya.

Ketika server virtual pribadi diatur (menggunakan VMWare untuk mengatur ESX Clusters) semua server bare-metal di Cluster seharusnya memiliki jumlah RAM yang sama.

MySQL Cluster harus diperlakukan dengan sarung tangan anak yang sama. Jika ada server (bahkan hanya 1) memiliki lebih sedikit memori daripada yang lain di Cluster, itu akan menjadi seperti faktor pembatas. Tidak akan mengejutkan saya jika server dengan RAM 2GB menyebabkan server lain di MySQL Cluster (bahkan jika server lain masing-masing memiliki RAM 8GB) berperilaku seolah-olah mereka memiliki paling banyak 2GB.

Paling tidak, Anda harus

Sebagai catatan, harap diingat bahwa MySQL Cluster juga memiliki kemampuan menyimpan data pada disk untuk setiap server yang berjalan sebagai node penyimpanan

RolandoMySQLDBA
sumber