タグ

ブックマーク / interdb.hatenablog.com (6)

  • 長年の議論に終止符 -- MySQL/MariaDBのバックアップとロックの関係+クラッシュセーフについて - interdb’s diary

    よい機会なのでまとめておく。対象はMySQL5.6以下とMariaDB10.0以下。 (2014.12.3追記:以下の書籍にも記述した。) 要旨 MySQL/MariaDBのバックアップについて、相変わらず「InnoDBさえ使っていれば、FLUSH TABLES WITH READ LOCKは不要。よってバックアップ中に更新不可になることはない!」との主張が繰り返されているが、少なくとも5.6/10.0まではそんなことはない。 オンラインバックアップに関するロックの正確な記述 より正確に言えば「全データベース領域をバックアップする場合には、FLUSH TABLES WITH READ LOCKは必須。特定のInnoDBだけのデータベースやテーブルをバックアップする際は、この限りではない」。 なのだが、全領域のバックアップをしたい人に対してロック不要説を吹き込む人が未だにいる。 ロックの必要

    長年の議論に終止符 -- MySQL/MariaDBのバックアップとロックの関係+クラッシュセーフについて - interdb’s diary
    sh2
    sh2 2014/09/22
    --lock-all-tableは--all-databasesの間違いかな / 直った / XtraBackup(MySQL Enterprise Backupも方式は同じ)が今のところ妥当かなという感想だけど、実はロックタイムアウトを起こすことがあるので困っている http://bugs.mysql.com/bug.php?id=71580
  • 長年の議論に終止符 -- MySQL、MariaDB、PostgreSQLのオプティマイザ/エクゼキュータ比較 - interdb’s blog

    https://mariadb.com/kb/en/optimizer-switch/にあるように、MariaDBのオプティマイザはかなり改良されている。 では、MariaDBのオプティマイザ/エクゼキュータはどの程度優秀か、4つのSELECT文の実行を通してMySQLと(ついでにPostgreSQLと)比較してみる。 (2014.12.3追記:オプティマイザについては省略してますが、こんながでます。) 結論を先にいえば「MySQLは検索が速い」というのは都市伝説。MariaDBはがんばってるけどPostgreSQLにはまだまだ及ばず。 *念のため。これはベンチマークじゃないよ、オプティマイザ/エクゼキュータの機能比較です。 自分で再確認したい場合はこちらにスクリプト群と実験のやり方を簡単に書いたので参照のこと。 調査環境 同一マシンにMySQL5.6.14、MariaDB10.0.4、

    長年の議論に終止符 -- MySQL、MariaDB、PostgreSQLのオプティマイザ/エクゼキュータ比較 - interdb’s blog
    sh2
    sh2 2013/10/22
    MySQLでHASH JOINが使える日は果たして来るのか
  • MySQLのCOMMIT時におけるfsyncの実行タイミング - interdb’s blog

    バージョン5.6で"innodb_flush_log_at_trx_commit=1"の挙動が変わった的な話があったので、こっちで軽く調べ、さらに追加調査したので結果を書く。 目的と結論 目的 簡単に書くと、5.6でバイナリログのグループコミットが入ってREDOログとバイナリログの書込みに依存関係っぽいものがでてきたこと、およびfsyncの回数を減らした的なアナウンスや解説がポツポツあるので、具体的にどうなっているのか調べるのが目的。 結論 結論を先に書くと: innodb_flush_log_at_trx_commit=1での基的な挙動は変わらない。 COMMIT毎にREDOログのwrite+fsync、バイナリログのwrite+fsyncがある。 変わったのは バイナリログの書込みがグループコミットになった REDOログとバイナリログの処理の後にtrx_commit_complate

    MySQLのCOMMIT時におけるfsyncの実行タイミング - interdb’s blog
    sh2
    sh2 2013/10/12
    詳しく調べていただいてありがとうございますm(_ _)m
  • MySQL5.6のordered_commit()とHA_IGNORE_DURABILITYとinnodb_flush_log_at_trx_commit - interdb’s blog

    MySQL 5.6 ではinnodb_flush_log_at_trx_commitの意味が MySQL 5.5 と違う』で、論理飛躍*1や間違い*2があったので、結論が正しいかどうかチェックしてみた。 なお、flushというかfsync()の呼び出しについて、および上記の記事に対する結論はこちらに書いたので参照。 ソースコードのトレース MYSQL_BIN_LOG::ordered_commit()からtrx_commit_in_memory()まで辿ってみる。 (1) MYSQL_BIN_LOG::ordered_commit() ここのStage 3で finish_commit()を呼ぶ。 /* Stage #3: Commit all transactions in order. */ ... 略 .... (void) finish_commit(thd); ... 略 ..

    MySQL5.6のordered_commit()とHA_IGNORE_DURABILITYとinnodb_flush_log_at_trx_commit - interdb’s blog
    sh2
    sh2 2013/09/20
    「1秒ごとにwrite+flushする」のはinnodb_flush_log_at_trx_commit=2です。それにしてもバイナリロググループコミットまわりはスパゲッティになったのであとでもう一度確認したい
  • 長年の議論に終止符 -- MySQLとMariaDBの違い一覧 - 技術メモ置き場

    (2014.12.3追記:このblogの内容は、以下の書籍にも反映させた。) SQLレベルの差異 MariaDB5.5とMySQL5.5ではSQLレベルでの違いはほとんどなかった。autoincrementの最大値の扱いくらい。 ただし、MariaDB10.0でREGEXPがマルチバイト対応になったので、アプリ側は注意。 項目 MySQL MariaDB Autoincrement 最大値に達すると、以降は最大値を繰り返す。Warningのみ。エラーにならない。tinyintなら…,125,126,127,127,127… 最大値-1まで。以降はエラーを返す。tinyintなら…,125,126,ERROR,ERROR,… EXPLAIN文 JSON形式 バージョン5.6から 未対応 Optimizer Trace バージョン5.6から 未対応(ただし、MariaDBのほうがオプティマイザ

    長年の議論に終止符 -- MySQLとMariaDBの違い一覧 - 技術メモ置き場
    sh2
    sh2 2013/09/20
    MariaDB 10.0は新機能の取り込みがアグレッシブすぎて、品質が保てるか心配している。あとデュアルライセンスではないので使用用途によっては注意が必要
  • PostgreSQLの共有バッファ(shared_buffer)とMySQLのバッファプール(buffer_pool)のメカニズム比較 - interdb’s blog

    PostgreSQLMySQLのバッファについて。 PostgreSQLのバッファマネージャ 詳細はこちらをみて頂くとして、PostgreSQLのバッファマネージャは、2005年リリースのバージョン8.1で大幅に変わった。 以下の表をみて頂くとわかるようにページ置換アルゴリズムは、8.0まではリストで実装したLRUとそのバリエーションであったが、8.1から配列で実装したClockSweep方式になった。 ページ置換アルゴリズムとロックの変遷 バージョン ページ置換アルゴリズム バッファマネージャのロック 方式 説明 PostgreSQL での呼称 説明 7.4まで [〜2004] LRU "Least Recently Used"の略称。最もオーソドックスなアルゴリズム。 BufMgrLock 排他ロックのみ。ページの入れ替えだけでなく、読み取りでも排他ロックをかける*1。 8.0.0〜

    PostgreSQLの共有バッファ(shared_buffer)とMySQLのバッファプール(buffer_pool)のメカニズム比較 - interdb’s blog
    sh2
    sh2 2013/08/05
    メモリ管理方式について
  • 1