昨日は、グリー勉強会にて「MySQLハッキングの手引き」というテーマで発表をしました。資料とデモに使用したソースコードやビルドスクリプト等はこちらに公開しています(サンプルプログラムのコンパイルにはソースからビルドしたMySQL5.1以降が必要)。声をかけてくださったグリーの一井さんや、会場準備など諸手続きを行なってくださったグリーのスタッフの方々、参加された皆さまありがとうございました。
●参加者数の意外な多さ
…
このところ、MySQL と Perl 関連のエントリをいろいろ書いていますが、それは、スケールアウト可能で、かつ、管理が容易なウェブアプリケーションを、簡単に書けるようにしたい、という理由があるからです。
ただ、ブログエントリだとどうしても細切れになるので、一連のモジュールやプログラムを組み合わせて、どうやってスケールするウェブアプリケーションを作るのかという話を YAPC::Asia 2009 でさせていただくことにしました。
YAPC::Asia 2009 は9月10日(木)と11日(金)の2日間、東京工業大学大岡山キャンパスで開催されます。今日からチケット販売も始まったので、興味のある方はお越しいただければ、と思います。
[さらに読む]I am sure many people have already done similar things, but to ease my pain of setting up mysqld on a large-scale environment (I am trying to create a set of database nodes, each node consists of a MySQL failover cluster using semi-sync replication, that can be administered easily), I have just finished writing a deployment script called mysqld_jumpstart. The caveats are:
- integration with daemontools (mysqld is automatically started)
- setup of masters and slaves
- can setup slaves from backup data generated by XtraBackup
The last feature was the one I especially needed, since thanks to the people at Percona, things have become much …
[さらに読む]
mala さんのMySQLにおけるbulk insert と bulk update - 金利0無利息キャッシング –
キャッシングできます - subtechのエントリーを見て, MySQL
でbulk update ができることを知り, 丁度欲しい機能だったのでとりあえず動くだけのメソッドを実装.
# User.extend BulkExecuteMethods
# User.update_multi([:id, :name, :age], [[1, 'bob', 11], [2, 'mary', 21]])
#
# refs
# http://dev.mysql.com/doc/refman/4.1/ja/insert.html
# http://subtech.g.hatena.ne.jp/mala/20090729/1248880239
module BulkExecuteMethods
def update_multi(columns, values)
cols = columns.map{|c| self.connection.quote_column_name(c) }
ph = (['(?)'] * values.size).join(',')
vals = sanitize_sql([ph, *values])
expr = cols.map{|c| "#{c}=VALUES(#{c})" …[さらに読む]
ORM やウェブアプリケーション関連のライブラリなどのテストケースを書くにあたっては、 RDBMS へのアクセスが必要になります。しかし、SQLite のようなスタンドアローンのデータベースと比較すると、サーバ型データベースである MySQL に接続してテストを書くのは、既存の MySQL の権限設定やデータベース名を気にする必要があったりと、いろいろ不便です。そこで、MySQL のインスタンスをテンポラリディレクトリに自動生成し、テストが終わったら削除してくれる Perl モジュール Test::mysqld を書きました。こんな感じで使います。
use DBI;
use Test::mysqld;
use Test::More;
my $mysqld = Test::mysqld->new(
my_cnf => { 'skip-networking' => '' }, # TCP接続を使わない
) or plan skip_all => $Test::mysqld::errstr;
plan tests => 10;
my $dbh = …[さらに読む]
Spiderストレージエンジンのバージョン 0.16をリリースしました。
http://spiderformysql.com/
今回の主な変更は以下です。
・サーバパラメータに「spider_same_server_link」「spider_table_init_error_interval」を追加しました。
「spider_same_server_link」は、同じMySQLにテーブルリンクを作成したい場合に利用します。
「spider_table_init_error_interval」は、誤ってテーブルリンクをループさせてしまった場合に、コネクションを消費し続ける問題を抑止するために利用します。もし、テーブルリンクがループした際に、コネクションが増加し続ける場合はset
globalコマンドを利用してこのパラメータを大きくしてください。
…
Spiderストレージエンジンのバージョン 0.15をリリースしました。
http://spiderformysql.com/
今回の主な変更は以下です。
・テーブルパラメータに「auto_increment_mode」を追加しました。
・サーバパラメータに「spider_auto_increment_mode」を追加しました。
Spiderは3モードをサポートします。
0:リモートサーバにロック付き問い合わせで取得した最新付番を利用して、付番を行う。
1:Spiderテーブル内のカウントで付番を行う。
2:リモートサーバで付番を行う。
・サーバパラメータに「spider_ping_interval_at_trx_start」を追加しました。
…
What comes up to your mind when you hear the phrase "MySQL performance tuning?" Most of the discussions covering the topic are things like server parameter tuning and blog entries describing the use of the "EXPLAIN" command. However, it is too time-consuming to check every single SQL query. A better approach is at first to determine the SQL queries that are actually consuming the server resources, and then to optimize those queries.
So the question is how to find out the bottleneck queries. At MySQL Conference & Expo 2009, Mark Callaghan explained in his keynote that Google was taking a statistical approach using the "SHOW PROCESSLIST" as a solution. The same command is mentioned as a rival approach in the webpages of MySQL Query Analyzer as well. Today, …
[さらに読む]MySQL のチューニング、と言った場合には、サーバーパラメータの調整や EXPLAIN コマンドを利用したクエリ実行計画の最適化が話題に上ることが多いです。しかし、発行する全ての SQL について、いちいち EXPLAIN コマンドを使って確認していては、いくら時間があってもたりません。チューニングを効率的に進めるには、まず、ボトルネックとなっている SQL クエリを特定し、次にその最適化を行うべきです。
ではどのようにして、ボトルネックを特定するのか。MySQL Conference & Expo 2009 のキーノートにおいて Mark Callaghan 氏は、Google では SHOW PROCESSLIST コマンドを使った統計的アプローチを使っていると述べていらっしゃいます (参照: MySQLConf 09: Mark Callaghan, "This is Not a Web …
[さらに読む]