Database MYSQL (ibdata1) berukuran 73 GB dan dikonfigurasi untuk dijalankan sebagai server database khusus pada Windows 2008 O / S untuk tabel INNODB. Kami menjalankan pencadangan menggunakan mysqldump mysqldump --skip-opt --quick --single-transaction --create-options --extended-insert --disable-keys --add-drop-table --complete-insert - set-charset - kompres --log-error = Proddb0635.err -u root -pjohndoe Proddb> \ devNas \ devNas \ sqlbackup \ LIVE \ db \ Proddb0635.sql
File cadangan Proddb0635.sql disimpan di server terpisah dari server database. RAM adalah 12 GB. Ukuran INNODB Buffer Pool adalah 6 GB. Mem.pool tambahan adalah 32 MB. Ukuran Cache Kueri adalah 2 GB Panjang buffer bersih adalah 16 M Maks. ukuran paket 1 GB.
versi mysql adalah 5.0.67.
Ketika cadangan tidak berjalan, pengguna senang dengan kinerja tersebut.
Ketika cadangan menjalankan INNODB Buffer pool, hit rate tinggi mendekati 100%. Tidak ada tulisan yang tertunda atau tulisan yang tertunda. innodb tunggu gratis adalah 0. Penggunaan CPU tidak tinggi, minimum 9% hingga maks 15%. Hit rate cache cache rendah sekitar 40% dengan atau tanpa mysqlbackup berjalan. Saat ini Windows Task Manager sedang menampilkan bahwa 10GB RAM sedang digunakan. Haruskah saya meningkatkan Query Cache dengan hanya tersedia 2GB RAM? mysqlld-nt mengambil 9,2 GB RAM dan mysqldump mengambil 5 MB RAM. Alos, mencatat bahwa ukuran file dump sama dengan ada atau tidak adanya opsi --compress.
Haruskah saya mengurangi ukuran Buffer Pool iNNODB?
Terima kasih
Berikut adalah beberapa pemikiran saya tentang meningkatkan kinerja mysqldump, mengingat keadaan Anda. Ini perintahmu:
Hal pertama yang saya perhatikan adalah Anda mengarahkan output ke sistem file. Dikatakan 'devNas' jadi saya akan menganggap ini adalah Network Attached Storage . Saya penggemar NAS untuk cadangan, tetapi harus terhubung pada NIC fisik terpisah dari lalu lintas produksi . Anda mungkin tidak menjenuhkan bandwidth, tetapi mereka masih bersaing. Ini akan menjadi lebih banyak masalah karena flag --quick, karena flag tersebut memerah setiap baris alih-alih menahannya di memori.
Hal berikutnya yang saya lihat adalah bahwa Anda telah memanggil --compress. Sepertinya Anda menjalankan mysql secara lokal karena Anda tidak menggunakan -h switch. Ini dapat menggunakan CPU lokal yang tidak perlu dalam konteks ini. Apakah --compress diperlukan? Ini hanya memampatkan data antara klien mysqldump dan server mysql, bukan konten file.
Selanjutnya saya melihat Anda menggunakan flag --single-transaction. Ini akan menyebabkan CPU ekstra karena pengujian pada setiap pilih sebagai bagian dari mysqldump.
Ini tidak ada hubungannya dengan kinerja, tetapi Anda menggunakan --disable-keys yang hanya berfungsi pada MyISAM ( manual ).
Anda mungkin ingin bereksperimen dengan menjalankan mysqldump dari jarak jauh dari host offline dan memindahkan file dump ke NAS setelah selesai untuk mengambil sebanyak mungkin operasi ini dari band.
sumber
PENGAMATAN # 1
Berikut adalah sesuatu yang perlu diingat ketika melakukan mysqldump terhadap InnoDB.
Apa pun halaman kotor yang ada di Pool Buffer InnoDB harus dibuang ke disk terlebih dahulu. Mysqldump akan memicu pembilasan tabel InnoDB yang masih memiliki halaman kotor di dalamnya.
Ada opsi server yang disebut innodb_max_dirty_pages_pct . Nilai defaultnya adalah 75 adalah MySQL 5.5 dan 90 dalam versi MySQL sebelum 5.5. Dalam lingkungan produksi, boleh saja meninggalkan nomor ini pada nilai default.
Untuk melihat apakah Anda memiliki banyak halaman kotor di InnoDB Buffer Pool, jalankan ini:
BTW halaman adalah 16K seperti yang ditunjukkan dari ini:
Ketika datang InnoDB dan mysqldump, Anda dapat menurunkan angka ini dalam dua keadaan.
CIRCUMSTANCE 1: Atur secara permanen ke 0
Cukup tambahkan ini ke my.ini:
Ini akan membuat InnoDB Buffer Pool ramping dan jahat. Langkah membilas tabel InnoDB yang sedang dibuang akan cepat karena beberapa halaman kotor mungkin (mungkin 0) perlu disiram sebelum mysqldump beroperasi di atasnya.
Satu-satunya kelemahan adalah jika Anda mysqldump dari DB yang sangat diperdagangkan, mungkin ada peningkatan yang lebih kecil dalam penulisan I / O karena membilas halaman kotor lebih sering. Anda dapat menentukan apakah ini tanpa me-restart mysql dengan menjalankan ini:
Biarkan pengaturan selama 12-24 jam, jika kinerja penulisan dapat diterima, Anda dapat melakukannya. Jika tidak, atur kembali dengan:
CIRCUMSTANCE 2: Atur ke 0 sekitar 1 jam sebelum mysqldump
Jalankan mysqldump
PENGAMATAN # 2
Anda memiliki --complete-insert sebagai opsi mysqldump. Ini akan menyematkan nama-nama kolom pada setiap status INSERT sebelum klausa VALUES. Bahkan dengan --extended-insert, pada setiap batch baris yang disisipkan memiliki nama kolom yang dikirim ke mysqldump. Anda dapat mengurangi jumlah byte yang dikirim ke mysqldump dengan menghapus --complete-insert.
REKOMENDASI
Jika Anda memiliki Windows Server lain yang dapat diatur sebagai Slave, lakukan mysqldumps dari slave itu dan bukan dari mesin produksi.
sumber