Ini terkait dengan pertanyaan ini . Itu membantu untuk mendapatkan kinerja yang lebih baik untuk tabel InnoDB.
Menurut manual MySQL , innodb_flush_log_at_trx_commit
adalah variabel dinamis global. Dengan demikian, saya dapat mengubahnya menggunakan perintah SET GLOBAL dan sepertinya berfungsi.
mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2;
Query OK, 0 rows affected
mysql> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2 |
+--------------------------------+-------+
1 row in set
Tapi, itu tidak membuat pengaturan MySQL yang sebenarnya berubah. Ketika saya memperbarui my.cnf dan me -restart server MySQL, itu berhasil. Jadi, saya tidak bisa mengubah variabel global saat dijalankan?
Saya lebih suka nilai default innodb_flush_log_at_trx_commit=1
, tetapi saya harus mengubahnya ke 2 sebelum saya menjalankan proses pemulihan untuk database besar agar lebih cepat. Tetapi ketika proses selesai, saya ingin mengubah nilai kembali ke 1. Apakah mungkin untuk melakukan ini pada saat run time?
Saya tidak memiliki akses ke my.cnf di server hosting bersama saya.
sumber
SET GLOBAL max_connections = 1000;
dan ketika saya menjalankanSHOW VARIABLES LIKE 'max_connections';
untuk melihat nilai lama akan mendorong kacang berarti sampai saya log out dan kembali. +1 untuk sudut pandang ini yang diterima begitu saja dan sering dilupakan.connect
itu sebenarnya baru bagi saya di MySQL. Saya telah melakukan itu sejuta kali di PostgreSQL dan Oracle. Saya tidak pernah berpikir bahwa MySQL mengizinkannyaconnect
). Dengan nilai 2, mengimpor 2.241 catatan mengambil 27 menit 43 detik, sedangkan butuh sekitar 1 hari dengan nilai 1. Pengaturan tampaknya berfungsi di sesi saat ini tetapi mengembalikan pengaturan asli (darimy.cnf
) setelah restart.innodb_flush_log_at_trx_commit
? Atau apakah itu untuk semua pengaturan, pengaturanglobal
tidak akan memengaruhi sesi saat ini?Dengan mengatur innodb_flush_log_at_trx_commit , Anda berisiko kebingungan dengan interoperabilitas mysqld / OS. Saya mengatakan ini karena OS sedang dipercaya untuk melakukan flush.
Perhatikan peringatan dari dalam Dokumentasi MySQL
Yang diceritakan adalah sebagai berikut: OS dapat berbohong seperti suami yang selingkuh. OS mengatakan akan mem-flush ke disk dan tidak melakukannya. Oleh karena itu, bahkan jika Anda mengatur innodb_flush_log_at_trx_commit, Anda harus menceraikan OS flushing ke disk dari mysqld's flushing ke disk.
Coba atur innodb_flush_method ke O_DIRECT jika Anda belum melakukannya. Anda mungkin melihat perbedaan karena metode flush sangat berbeda (Lihat
Mar 04, 2011
posting saya Klarifikasi pada variabel innodb_flush_method MySQL ).CAVEAT
Seperti yang Anda sebutkan, Anda tidak memiliki akses ke
my.cnf
. Silakan hubungi SysAdmin di penyedia Anda dan dapatkan innodb_flush_method berubah.UPDATE 2012-12-10 12:45 EDT
Saya saat ini menjalankan MySQL 5.5.12 di PC saya. Ketika saya terhubung dan menjalankan
show variables like 'innodb_flush_method';
saya dapatkanKarena kosong, itu hanya menunjukkan bahwa pengaturan default digunakan. Silakan baca posting saya Mar 04, 2011 untuk Klarifikasi tentang variabel innodb_flush_method MySQL
sumber
innodb_flush_method
dimy.ini
(tidakmy.cnf
). Informasi server - Apache 2.4.1, PHP 5.4.4, MySQL 5.5innodb_flush_method
pengaturan danSHOW VARIABLES
tidak menunjukkannya.my.ini
ataumy.cnf
dan itu bukan variabel dinamis, saya tidak yakin bagaimana saya bisa mengkonfigurasinya.