Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 1081

[勝手に補足]DBアタマアカデミー第1回記憶装置のトレードオフとバッファの考え方

$
0
0
さてみなさん、ご無沙汰の木村です。

私は以前からデータベース各種連載を[勝手に補足]してきたのですが、どうやらミックさんの連載については
第1回を補足していなかったみたいなので、四年たってからやっとの補足です。。。。

幸い元記事はWEB+DB PRESSの総集編でも読めますし、以下のWeb版も読めますので、是非チェックしてみてください!

DBアタマアカデミー

さて、勝手に補足の時間です(Web版を元にしてます)♪

第1回 記憶装置のトレードオフとバッファの考え方―すべてをとることができないとき(1)

特に補足ありません。。。。

第1回 記憶装置のトレードオフとバッファの考え方―すべてをとることができないとき(2)

# MySQL 5.5->5.6はデフォルト値が大きく変わりましたが、この比較表にでている部分については特に変更無く同じとなってます。詳しくはこちらをどうぞ。

(1) 後だしじゃんけんですが(笑) PostgreSQL 8.5は9.0としてリリースされました。

PostgreSQL 8.5 は 9.0 としてリリース(Let's Postgres)

(2) MySQLにはロールフォワードリカバリ用のバイナリログがある

OracleではREDOログはクラッシュリカバリとロールフォワードリカバリの両方で利用されますが、
MySQL(InnoDB)のInnoDBログはクラッシュリカバリにしか利用されません。
ロールフォワードリカバリにはInnoDBに限らず、MySQLシステム全体の仕組みとしてのバイナリログが利用されます。

バイナリログのバッファサイズは32KB(デフォルト)です。
MySQL 5.5以降トランザクション用のbinlog_cache_sizeと非トランザクション用のbinlog_stmt_cache_sizeで指定します。
MySQL 5.1以前はbinlog_cache_sizeだけでした。

MySQLではバイナリログをロールフォワードリカバリ以外に、レプリケーションでも利用します。

現場指向のレプリケーション詳説


(3) PostgreSQLでは「ログをとらない」指定がテーブル単位でできる。

これもPostgreSQL 9.1以降なので後だしじゃんけんというか、アップデートですがUNLOGGEDテーブルというのが追加されました。

RDS for PostgreSQL で UNLOGGED テーブルを試してみる


(4) 本文注3)のPostgreSQLの非同期コミットと同様な指定がMySQLにもある。

MySQLではACIDを担保するために、バイナリログ用にsync_binlog, InnoDBログ用にinnodb_flush_log_at_trx_commitの指定があります。それぞれの指定により同期を緩めることが可能です。そのときのデメリットは本文注3)と同じです。




バイナリログでACIDを担保するにはsync_binlog=1に設定する必要があります。(デフォルトは歴史的経緯から0)
これはMySQL 5.5までは大きくパフォーマンスに影響していましたが、MySQL 5.6からは大きく改善されています。
(実はこれだけでもMySQL 5.6にアップグレードする価値はあると思うのですが)詳しくは以下のSH2さんやDimitriKのエントリをどうぞ。

2012-07-17 MySQL 5.6におけるsync_binlog=1の改善について&勉強会のお知らせ


MySQL Performance: Binlog Group Commit in 5.6


SH2さんも言及されていまが、PostgreSQLも9.2から高負荷時にグループコミットが効果的に動作するよう改善されています。

PostgreSQL 9.2 に関する技術情報(SRA OSS)


第1回 記憶装置のトレードオフとバッファの考え方―すべてをとることができないとき(3)

このパートも特に補足ありません。。。

では、よいお盆を!!

JUGEMテーマ:コンピュータ



PlanetMySQL Voting: Vote UP / Vote DOWN

Viewing all articles
Browse latest Browse all 1081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>