2011年8月9日火曜日

MySQL Casual Talks vol.2のメモ


このエントリーをはてなブックマークに追加


興味のある範囲だけでも、自分なりにまとめるのは絶対意味があると思うので、ちゃんと書いておく。
(下の参加してきたよ、のメモを読んだらちょっとやる気なくしかけたので。)


参考


「MySQL Casual Talks vol.2」に参加してきたよ、のメモ
oak-online-alter-table
MySQL4.0の運用


※発表者の横に書いてるのは発表タイトルじゃなくて、あくまで自分のまとめ用タイトルです。


MySQLをKVSとして使う (@さん)



  • KVSがオンメモリだとバグがあった場合、再起動が必要。前に7時間かかった。 -> MySQLに一本化



チューニング


  • スロークエリチェック

  • クライアント側でもスロークエリ出力

  • JAVAのスタックトレース出力

  • MySQLのコンテキストスイッチが激しいので、in句などで、クエリ数を減らす。



MySQLをKVSにしたメリット・デメリット


  • メリット


joinできない。インデックスの聞かないクエリは投げれない。
他のものに移行しやすい。



  • デメリット


キー以外での絞り込み。
アプリでソートロジック必須。
カラムの型変換GDB


超カジュアルに使うMySQL (@さん)


ぐにゃら君による本当のカジュアルとはこういうものだ講座。
発表資料


カジュアル

idはBIGINT
JSON/XMLをそのまま保存


カジュアルといえど限度はある

natural_key、created、updatedはカラムを分ける。


frendfeed方式でインデックスを別テーブルに分ける。

インデックス用に別テーブルを用意する。こういう呼び名だったのか。
blobがあるテーブルだと分けてます。


あとで変更する必要に迫られる

カラムを追加すればいいじゃない(by マリーアントワネット)
ALTER TABLEは遅い。
ツールがあるので使ってみるのも手(ほとんど非検証)



  • openarkkit

    • MySQL便利グッズ詰め合わせ。下のoak-online-alter-tableもその1つ。

    • oak-online-alter-tableMySQLを停止させないALTER TABLE





1.メンテナンス対象の元テーブルをコピーして、作業用の仮テーブルを作ります
2.仮テーブルに対して、カラム追加などの変更を加えます
3.その間、元テーブルに対して行われる更新処理について差分を記録しておきます
4.仮テーブルの変更が終わったら、記録しておいた差分データを仮テーブルに反映します
5.差分データの反映が終わったら、元テーブルと仮テーブルを入れ替えます
[リンク先より]




  • OnlineSchemaChange.php(facebook製)

    • facebook製のopenarkkitといったところ。





データ圧縮


  • MessagePack+Snappy


データを6割ほど圧縮できるので、I/Oも減る。
まぁカジュアルに使うならJSON突っ込むだけでいんじゃね、って言ってかも。


MySQL5.5からのperformance schema(@さん)


いろいろ統計とか情報が取れる。現状、以下の方法があるが、まだ足りなかった。



  • プロセス監視

    • pgrep -x mysqld



  • status

  • show

  • Information shema(MySQL5.5~) showより使いやすい

  • show profile

  • ログ

  • GDB いろいろ見れるが時間が止まっている。天敵はOptimized away。

  • dtrace -p `pgrep -x mysqld` -s script_name

  • GBUGトレース MySQLデバック版で使用可能。


デメリット

CPUパワーを使う。毎秒あたりのトランザクション数が数割落ちるので、web系で使うのはしんどいか。


MySQL5.07 -> MySQL5.5 へのアップデート (@さん)


発表資料
CentOS5標準のMySQL5.07から、一度MySQL5.1にアップデートしてからMySQL5.5に。
このときMySQL5.1、MySQL5.5は別マシンを用意して組み込みのMySQLを使ったほうが安全かも。


よくあるエラー

なくなっている設定がエラーが原因で起こる。
代表的なのは、default-charcter-set=utf8


MySQL MHA (@さん)


MySQLが止まったときに、マスターやスレーブの差分を見つけて同期。PurePerl
発表資料


マスターN対スレーブ1の構成(@さん)


マスターを分けるとjoinできないので、横断的にクエリ投げれない。
うっかりカジュアルに参加してしまった僕には基本的な内部の話がとても勉強になった。
発表資料


MySQLでNoSQL(@さん)


オラクルの中の人?作った理由は流行ってるから。実装が2つあって、理由は社内の人が2人、同時期にこんなの作りましたって持ってきたから。
ひとつは、MySQL5.6のmemchachedインタフェース用プラグイン。もうひとつは、MySQL Cluster 7.2。ClusterはもともとKVSで、なんかよくわかりません。下記に説明がありました。 *後で読む
スライド





0 件のコメント:

コメントを投稿