MySQL

DBチューニングできますか?(6)

概要 というわけで最近いろいろと面接行ったりしてます。 ルールとコスト 面接官「DBチューニングできますか?」 私「そうですねー(中略)『インデクスとクエリからオプティマイザが何しようとするか程度は意識してます。』」この後面接官はこう言いました。…

DBチューニングできますか?(5)

せっかくインデックスファイルとメモリについて説明してきたのでついでにプレフィックスインデックスの事をさらっと説明します。 概要 * 目的となるデータを探す場合はインデックスを活用すると効率が良い * インデックスはその構造上よく使われるデータから…

DBチューニングできますか?(4)

実はもうちょっとだけ続くシリーズ第四弾です。 概要 MySQLサーバーが目的となるデータを探す場合はインデックスを活用すると効率が良い、という事を前回まとめてみました。 さらにインデックスはその構造上よく使われるルートにより近いノードからメモリ上…

DBチューニングできますか?(3)

概要 前回インデックスを使うとよく使うブロックをキャッシュするから高速になりますよーという内容の記事を書いたのですが、 その前にシーケンシャルアクセスとランダムアクセスの違いを書いてないのに気づいたので順番前後しますがその話です。 シーケンシ…

DBチューニングできますか?(2)

概要 MySQLサーバを効率よく活用するにはインデックスについて知る必要があると思います。 今回はインデックスを使うとなぜSQLが高速になるのかを考えたいと思います。 ディスクI/Oの回数を減らす工夫 以前ファイルについての記事をちょっと書いたのですが …

DBチューニングできますか?

あらすじ 面接に行くとDBに関しての知識はどれぐらいあるのかを問われる事が多々あります。 それは良いのですがその質問がざっくりとしている事が多々あります。たとえば次のように広い質問をうけたりします。「DBのチューニングはできますか?」何を基準に…

実践ハイパフォーマンスMySQLが役にたったという話

概要 sennaの全文検索で処理が遅くなっているので直せって言われて直したときの話です。 いわゆる既存コードの改修です。 $ mysql --version mysql Ver 14.12 Distrib 5.0.87, for unknown-linux-gnu (x86_64) using readline 5.1 MASTER/SLAVEの一般的な構…

MyISAMの大きなテーブルをmyisamchkするとエラーになる場合の備忘録

sennaのインデックスファイルを再構築にチャレンジ。インデックスをつくりなおす mysql> ALTER TABLE hoge DROP KEY `hoge_key`; mysql> ALTER TABLE hoge ADD FULLTEXT KEY `hoge_key` USING MECAB, NORMALIZE, SECTIONALIZE, 2048 (`hoge`,`fuga`);インデ…

select時にキャッシュを使わないクエリを発行する

毎回構文を忘れて検索に時間を要してしまうのでいっそのこと自分のブログに書く。 SELECT SQL_NO_CACHE * FROM hoge;

SQL_CALC_FOUND_ROW本当に高速なのかしら

http://dev.mysql.com/doc/refman/5.1/ja/information-functions.html SELECT SQL_CALC_FOUND_ROWS を使用している場合、MySQL は完全な結果セットにいくつ行があるか計算する必要があります。しかし、結果セットをクライアントに送る必要がないため、LIMIT …

LinodeでInnoDBチューニング(3)

概要 innodb_log_buffer_sizeをlog fileのサイズと勘違いしていた事が発覚したので修正したら、過去の記事とは違うベンチマークがでました。前回までのベンチはinnodb_buffer_pool_sizeを大きくしていったものでしたが、それに合わせてログファイルを大きく…

LinodeでInnoDBチューニング(2)

概要 前回、innodb_buffer_pool_sizeをちょっと大きくしたら性能がだいぶ変わったのでmysqldの使用メモリを全体の80%になるまで、少しずつあげてみたという記事です。 試したinnodb_buffer_pool_sizeの値 240MB, 300MB, 360MBを試しました。mysqldのプロセス…

LinodeでInnoDBチューニング

概要 前回(今朝)の記事で使用したmy.cnfでMySQL Benchmark Suiteのinsertに関するベンチマークをとってみました。 今回はinnodb_buffer_pool_sizeとinnodb_log_buffer_sizeを変更してみたらどれだけ数値が変わるのかを見てみる試みです。 my.cnf 前回の記事…

LinodeでInnodbの設定ファイルを考える

概要 Linodeで自作WEBアプリを公開していたりしますが、mysqldを立ち上げることがなかったので(参照メインなのでmemcached+SQLiteで足りていた)あんまりmy.cnfのパラメータを考えてなかったんですがちょっと考えてみたという話です。 設定ファイル my.cnfは…

mysql-benchでデータベース負荷テスト

mysql-benchをインストール % sudo yum list --enablerepo=remi | grep mysql-bench mysql-bench.i386 5.1.49-1.el5.remi % sudo yum install --enablerepo=remi install mysql-bench どこに行ったのかを調べます。 % rpm -ql mysql-bench ... /usr/share/sq…

innobackupex-1.5.1

xtrabackup試そうとしたらinnobackupex-1.5.1がなにかをする予感がしたのでやってみる リファレンス http://www.percona.com/docs/wiki/percona-xtrabackup:start インストール % uname -i i386 % wget http://www.percona.com/downloads/XtraBackup/XtraBac…

ファイルシステムキャッシュとダイレクトI/O

概要 次のコマンドをご覧ください。 % cp hoge.txt hogehoge.txt このコマンドを実行した後、次のコマンドを実行します。 % cp hoge.txt hogehogehoge.txt どちらが高速なのか、それは後者です。という話をしてからMySQLのダイレクトI/Oについて少々書きます…

ランダムインサートと昇順インサート

概要 MySQL、InnoDBのお話です。INSERT文を実行するとインデックスにエントリが追加されてリーフブロックがうんぬんな話です。 インデックスが存在するテーブルへのINSERTは、実レコード+インデックスのリーフブロックにエントリが追加されます。今回の記事…

楽観ロック

概要 本日はデザインパターンとMySQLの話です。 なんか愉快な音楽の話ではありません。 問題が起きた 最近お仕事でこんなプログラム書きました。 package App::Web::Controller; sub dispatch_buy { my $self = sfhit; ... $db->txn_start(); try{ die unles…

クラスターインデックス

くらえ!!クラスターインデックス!! と、知らない人が聞いたらきっと特撮ヒーローの必殺技だと思うであろうこいつについて書いときます。なんというか小粒だけどぴりりとくるような、そんな小ネタです。たぶん。 クラスタインデックスと2次インデックス InnoD…

DBチューニング(3)

データの検索がどのように行われるかを見てみます。 explain extendedはMySQL 5.1.12からの新機能です。 explain extended select * from table01 where id=777; +----+-------------+---------+------+---------------+------+---------+------+---------+-…

DBチューニング(2)

クラスタインデックス ''InnoDB''において''プライマリキー''を設定したテーブルには''クラスタインデックス''と呼ばれる特別なインデックスを持ちます。主キーのインデックスは集合インデックスになります。 これをテストしたいと思います。 テスト用データ…

DBチューニング(1)

DBチューニング DBチューニングに関するサイトを作っていたのですが順序だてて説明するのが難しくなってきたので一旦学んだことをリリースします。 ディスクI/O性能 ''RDBMS''では高速化を行う際に、''索引''となる''インデックス''を最適化する作業を行いま…