• ベストアンサー

innodb_flush_log_at_trx_commitをいつ変更しても問題ないですか?

パラメータ変更によりどのくらい早くなるか知りたいのですが、 運用中のサーバーの、innodb_flush_log_at_trx_commit を1から2に変更する場合注意点はありますでしょうか?

  • php4
  • お礼率42% (373/888)
  • MySQL
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • ogohs
  • ベストアンサー率33% (5/15)
回答No.1

この質問をされている時点で、相当調べられてのことだと思うのですが…当たり前に知っているって時は流してください^^: ○ログへの書き込みのタイミングが遅くなる代わりに、基本的に性能向上につながります。 特に、Windowsで利用されている場合は影響が大きい場合が多いです。 ○変更にともない、変更を有効後の値を有効に利用するために、 ・innodb_log_file_size ・innodb_log_files_in_group の変更を勧めているサイトが多いですが、運用中のサーバに対して上記を変更することは非常に危険です。 基本的に、「innodb_flush_log_at_trx_commit」変更のみで検証してください。 ○レプリケーション等にバイナリログを利用している場合は、 今まで以上に遅延がする可能性があります。 ログインや認証等にDBを使用している場合は注意してください。 (※1→2へ変更するということは、それほど大事なデータやリアルタイム性があるわけではないきがしますが^^;) ○

php4
質問者

お礼

安全に設定値を変える事ができました。ありがとうございます。 ただ、トランクションを張って、設定値を変えても 0.01%程度しか早くなりませんでした(汗) ボトルネックが違う箇所のようです。ほかの設定値も変更してみます。

関連するQ&A

  • MySQL 肥大化したテーブルへのINSERT速度

    タイトルの件について、分かる方おりましたらどなたかご教授ください。 [DBサーバ] Linux CentOS 6.4 CPU Xeon core4 SSD 250GB RAM 32GB バージョン情報 MySQL 5.5 tomcat 6 JDK 6 会員データをCSVから大量にUSERテーブルへINSERTする処理を行っています。 また、それに関連するデータも同時にINSERTをします。 (USER_ID を持っている SERVICE_POINTテーブルやADDRESSテーブル) 処理の流れとしては以下となります。 (1) 会員情報の入ったCSVファイルをサーバへアップロード (2) 1でアップロードしたCSVファイルを○○○○件毎に一時ファイルに切り分ける ~~ ここからバックグラウンドで実行 ~~ (3) 2で切り分けたファイルをループで回しながら、メアドの重複やフォーマットエラーなどを判定する (4) 3でエラーがあれば即座にERRORSテーブルにエラー詳細をINSERTし、コミット&continue; (5) 3でエラーがなければUSERテーブル・SERVICE_POINTテーブル・ADDRESSテーブルへINSERT処理 (6) その他関連するテーブルへUPDATE処理 (7) 3に戻る ストレージエンジンは全てInnoDBです。 my.cnfのInnoDBの設定は以下の通りです。 innodb-buffer-pool-size = 24G innodb-log-buffer-size = 8M innodb-log-file-size = 1024M innodb_log_files_in_group = 3 innodb_fast_shutdown = 0 innodb_data_file_path = ibdata1:10M:autoextend innodb_file_io_threads = 4 innodb_change_buffering = all innodb_thread_concurrency = 16 innodb_flush_log_at_trx_commit = 2 innodb_max_dirty_pages_pct = 90 innodb_flush_method = O_DIRECT innodb_lock_wait_timeout = 120 innodb_additional_mem_pool_size = 128M innodb_file_format = Barracuda innodb_file_per_table = 1 なお、ERRORSテーブルのINSERTは非常に速いです。 会員数が全くない状態だとスムーズに登録されていくのですが (1秒に15件程度) テーブルが肥大化して20万件を超えると1秒に1件ほどしかINSERTされません。 この速度を少しでも速くしたいなと思っています。 1件ずつコミットしているのには理由があります。 ただ、1000件ずつコミットしても速度はほぼ変わりませんでした。 こういう場合、やはりパーティショニングを検討しなければならないでしょうか。 よろしければどなたかご教授ください。 以上、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • InnoDBのAuto Incrementsの問題

    今回、InnoDBとMyISAMの Auto Increments(以下AI)の挙動に対する 対処方法についての質問になります。 以前は5.1のMySQLを使用していましたが、 最近利用しているホスティング会社の方で変更があり、 MySQL5.6へのバージョンアップが行われ、 そこから発生している問題です。 例えば testtb ------------- id item ------------- 1 aaa 2 bbb 3 ccc ------------- というテーブルがあります。(InnoDB) idはプライマリーキーでAIが設定されています。 基本的にこのテーブルでは itemのアップデートくらいで、 レコードを削除するような動作は起こりません。 ところが管理者サイドのテストの際に 下記のように、でMAX(id)を抽出してそのレコードを削除し、 AIの値を削除したMAX(id)に変更するという動作が稀に発生します。 $sql = "SELECT max(id) FROM testtb "; $result = mysql_query($sql, $con); $maxid = mysql_result($result, 0); $sql = "DELETE FROM testtb WHERE id = '{$maxid}' "; mysql_query($sql, $con); $sql = "ALTER TABLE testtb AUTO_INCREMENT = {$maxid} "; mysql_query($sql, $con); 要するにテストで登録した最新idのレコードを削除し、 AI値も元に戻してテスト前の状態に復旧するという内容です。 以前のMySQLのバージョンでは これが問題なく動作していましたが、 MySQL5.6に変わってから InnoDBの場合には、 ALTER TABLE testtb AUTO_INCREMENT = {$maxid} このSQL文を実行しても結果が全く反映されません。 phpmyadminからも実行してみましたが 実行結果にエラーはでないのですが、 同様に結果は反映されず、AI値の変更が行われません。 少しググってみて、innodb_autoinc_lock_mode の設定が関係しているのではと思い見てみると innodb_autoinc_lock_mode = 1になっていました。 ちなみにこの値は共有DBのため、 ホスティング会社の方での固有の設定で 私の方で変更はできません。 上記の問題はMyISAMでは発生しませんので、 InnoDB固有の特徴によるものかと思います。 innodb_autoinc_lock_modeの設定変更なしで 上記を解消する方法はありますでしょうか? もうMyISAMで運用するくらいしか方法が見つかりません。 それからこれに関連する内容で もう一つ質問があります。 これはphpmyadminに関する質問なのですが、 以前ですと、テーブルを選んで 上メニューの「操作」という箇所から AIの値が確認できて変更もできたかと思うのですが 現在はAIの値を操作する箇所が全く見当たりません。 確認のためにSHOW TABLE STATUSを実行する以外に 確認・変更のできる場所はありませんでしょうか? ちなみにphpmyadminのバージョンは4.0.0です。 よろしくお願いいたします。

  • adobe flash proバージョン毎の変更点

    お世話になります。 adobe flash professionelのバージョン毎の変更点(改良点)を 教えて頂きたく思います。 対象は、 CS3 CS4 CS5 の違いについて聞かせて頂ければと思います。 また、CS3の環境と CS5の環境で、1つのFlashについて 共同で作成する場合の注意点も教えて頂ければと 思いますのでよろしくお願い致します。

    • ベストアンサー
    • Flash
  • MySQLの文字コードが変更されない

    お世話になっています。 EUCでPHPを書いています。 DBから取ったデータが文字化けしてしまいます。 全ての文字コードをujisにしたいのですが、変更できず困っています。 現在は以下のようになっています。 ――――――――――――――――――――――――――――――――――――― ■環境 Windows7(64bit) Mysql 5.5 ――――――――――――――――――――――――――――――――――――― ■my.iniのパス C:\ProgramData\MySQL\MySQL Server 5.5\my.ini ――――――――――――――――――――――――――――――――――――― ■サービスの起動パス "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.5\my.ini" MySQL55 (my.iniでポート変えたらCLIから接続できなくなったので、設定は反映していると思います。) ――――――――――――――――――――――――――――――――――――― ■my.ini [client] port=3306 default-character-set=ujis [mysql] default-character-set=ujis [mysqld] port=3306 character-set-server=ujis init-connect=SET NAMES ujis skip-character-set-client-handshake default-character-set=ujis default-storage-engine=INNODB sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" max_connections=100 query_cache_size=0 table_cache=256 tmp_table_size=10M thread_cache_size=8 myisam_max_sort_file_size=100G myisam_sort_buffer_size=69M key_buffer_size=55M read_buffer_size=64K read_rnd_buffer_size=256K sort_buffer_size=256K innodb_additional_mem_pool_size=3M innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=2M innodb_buffer_pool_size=107M innodb_log_file_size=54M innodb_thread_concurrency=10 [mysqldump] default-character-set=ujis skip-opt create-options set-charset hex-blob single-transaction ――――――――――――――――――――――――――――――――――――― ■コマンドラインからの確認 mysql> status; --------------------------------- Server characterset: utf8 Db characterset: utf8 Client characterset: ujis Conn. characterset: ujis ――――――――――――――――――――――――――――――――――――― 何かヒントを頂けないでしょうか。

  • ファイルサーバーのアクセスログ、フォルダー変更ログ

    Windows server 2003, ファイルサーバーで使う、共有フォルダが40人位書き込む権限がある。 共有フォルダの中のサブフォルダーが消される心配がある。アクセスログ、フォルダー変更ログを設定したい。 そうすると、万が一、どのフォルダーが、何時、何方によって消された時に、管理者のチェックができる。 どう設定すれば良いでしょうか?

  • メールのログのパーミッションを変更したい

    メールサーバーのログのパーミッションを変更することってできるのでしょうか? 現在、maillogのパーミッションがrw-------となっていて、 管理者以外は見ることができません。 ログの確認のたびにsuするのも大変なので、 読み取りだけでもできるようにしたいです。 どこをどう設定すればいいのか分かりません。 動作環境は、 VineLinux3.1 Postfix Courier-imap です。 ぜひともよろしくお願いいたします。

  • MTからATへの変更

    今日から自動車学校に通い始め、先程2時間の技能教習を終え帰ってきた所です。教わってる時に話に出て気になっていたのですが、今はATが主流で、MTは職場等でどうしても必要な人以外は滅多に乗る機会がなく、ATの方が早く取れると聞きました。そして、今日早速MT車に乗ってみた所、初日というのも勿論ありますが(むしろそれが9割方)、クラッチペダルの離し過ぎで何度もエンストさせてしまい2時間で通常なら4過程済ませる所を、3過程終わらせるのが精いっぱいでした。先生にも、「もしMTが難しいようなら、今の世の中殆どAT車に変わりつつあるので時間を早く済ませたかったり、職場等で使う予定がないのならATに変更してみるのも1つの手かもですね」みたいな言葉をかけられ、私もそんなにMTを使う機会がないというのなら、AT限定でもいいかな・・・と思うようになってきました。そこで質問なんですが、MTからATに変更する場合、例えば極端な話教習所通い始めた翌日にも変更する事は可能なんでしょうか?また、変更するなら早めにしたほうがいいんでしょうか?

  • phpMyadminでどうしてもinnoDBが有効になりません。

    phpMyadminでどうしてもinnoDBが有効になりません。 ローカル環境 phpMyAdmin - 2.11.4 MySQL クライアントのバージョン: 5.0.51a ストレートエンジンをMyISAMで開発を行っていましたが、 innoDBに変更することにしました。 色んなサイトを拝見しましたが、どうも有効になってくれません。 対処した項目を書きます。 (1) my.cnf内のskip-innodbをコメントアウト (2) 数回XAMPPのコントロールパネルからMySQLを再起動 (3) ログファイルib_logfileの確認 <無し>   (ログファイルが生まれていれば、xampp/mysql/data/ ← この中に生まれますよね?) (4) (3)のログファイルがあれば、それを削除しようと思いましたが見つかりませんので、   無視しました。このログファイルは、my.cnf内のinnodb_log_file_size = デフォルト値を   変更した場合、既に生まれているログファイルのサイズと異なっていらば、エラーとなるらしく、   まあ、一度もinnoDBにてテーブルを作成していないので、ログが生まれるはずもなく・・・    一応ケアーしてみました。 いかがでしょうか? これら以外に、innoDBがphpMyadminで有効になってくれない理由がありますでしょうか? かなりハマッてます・・・。お助け下さい。。

    • ベストアンサー
    • MySQL
  • Flashでログファイルの呼び出しのようなプログラム

    タイトルのとおりです。 PHPのようにFlashでログファイルの呼び出しのようなプログラムはできますか? PHPの場合、 あるcsvファイルに、 画像ファイル名・URL・コメント とを書き、それをリスト化して配列に組み込み、 それを取り出して表示。 といった感じのプログラムをフラッシュでもできないかなと考えています。 環境はFlash CS3です。 アクションスクリプトは2.0を使用していますが、 3.0でもOKです。

    • ベストアンサー
    • Flash
  • ATからMTへの変更も有りかな

    昨日『50歳親父が一本橋で落ち込んでます』で質問した者です。 ATは易しいと思っていたのですが皆さんの回答を見ているとMTに変更した方が良いのかなぁと思いはじめました。 まだ、やり始めたばかりなのにごめんなさい。 もちろん、ATでやります。 教習所の落第記録を作るつもりではいます。 が・・・万一の場合、ATからMTへの変更も有りかなと そんな甘くはないですよね。 ご意見ください。