mysql

Understanding MySQL Internalsを読む(8)

連載記事一覧は*こちら*にあります。http://mirz.jpでまとめて読むこともできます(オススメ)。 プリプロセッサマクロ MySQLのソースコードはC言語のプリプロセッサマクロを多用しています。以下はMySQLで良く利用されているプリプロセッサマクロです。 マク…

Users Conference Japan 2007 申込受付開始

MySQLのユーザカンファレンスが9/11-12の2日間、東京で行われます。すばらすぃ〜ですねぇ。数年前はこんなこと考えられなかったです。時代は変わりつつあるとうことなのでせうか。http://www.mysql-ucj2007.jp/session/index.htmlあのRubyの*まつもとゆきひ…

Understanding MySQL Internalsを読む(7)

連載記事一覧は*こちら*にあります。 Core API一覧 メモリ割当て、文字列操作、ファイル管理などの処理はいくつものグループの内部APIによって行われています。ポータビリティを確保するため、MySQLのコードはCのライブラリの呼出を非常に控えめにしており、…

Understanding MySQL Internalsを読む(6)

以前の記事 [MySQL] Understanding MySQL Internalsを読む(1) [MySQL] Understanding MySQL Internalsを読む(2) [MySQL] Understanding MySQL Internalsを読む(3) [MySQL] Understanding MySQL Internalsを読む(4) [MySQL] Understanding MySQL Internalsを…

Understanding MySQL Internalsを読む(5)

以前の記事 [MySQL] Understanding MySQL Internalsを読む(1) [MySQL] Understanding MySQL Internalsを読む(2) [MySQL] Understanding MySQL Internalsを読む(3) [MySQL] Understanding MySQL Internalsを読む(4) NET構造体 NET構造体はMySQLのclient/serve…

Understanding MySQL Internalsを読む(4)

以前の記事 [MySQL] Understanding MySQL Internalsを読む(1) [MySQL] Understanding MySQL Internalsを読む(2) [MySQL] Understanding MySQL Internalsを読む(3) THDクラス MySQLのCoreなクラスのひとつ、THDについて。THDクラスはMySQLの上位層(データベー…

Understanding MySQL Internalsを読む(3)

前回の記事 [MySQL] Understanding MySQL Internalsを読む(2) gdbデバッグするときのお薦めbreakpoint個所 P.35の表より。これでgdbデバッグ効率UP〜。 操作対象 お薦めbreakpoint個所 見ると幸せになれるかもしれない変数 SELECT文を実行 mysql_select() *t…

Invalid library (maybe not a PHP library)

phpをデバッグビルドしたのは後々に役立つだろうということの他に、当面の問題として"Invalid library (maybe not a PHP library)"が何なのかを調べようという趣旨があったりしました。php.iniに"extension=libmysqlclinet.so"と書いて、"/usr/lib/php/modul…

Understanding MySQL Internalsを読む(2)

前回の記事 [MySQL] Understanding MySQL Internalsを読む(1) Status Reporting Module システム変数、ステータス変数、テーブル情報、レプリケーションの状態、テーブルキャッシュ等を報告する。SHOW系コマンドの処理。ほとんどのコードはsql/sql_show.ccに…

Understanding MySQL Internalsを読む

『Understanding MySQL Internals』なるMySQLソースコード解説本が発売されました! たぶん現存する書籍(洋書含む)の中ではもっともコード寄りの本だろうと思います。著者曰く『Understanding the Linux Kernel』とか『Linux Device Drivers』のMySQL版となる…

C++コンパイラとlibgcc_c.so、libstdc++.so

ビルドオプションのひとつであるCXXを何も指定しない場合、環境にも依ると思いますが、コンパイラにより生成されるmysqldバイナリが、libgcc_c.so、libstdc++.soにリンクする場合があります。CXXはC++コンパイラを指定するためのフラグです。例えばこんな感…

バンドルしているzlibのライセンス

$MYSQL/zlib/FAQというテキストファイルの22個目のQAに、「zlibは商用アプリケーションで使用しても良いですよ。詳しくはzlib.hを見れ。」と書いてあります。 22. Can I use zlib in my commercial application? Yes. Please read the license in zlib.h.zli…

--with-tcp-portが効かない

Windowsでは効いていた(ような気がする)けど、Linuxバイナリにどうも--with-tcp-portが効いていない感じ。 ./configure --with-tcp-port=9999 && make sql/mysqld --help --verbose | grep portするとmaster-portとかreport-portとかは変わるのにportが変わ…

--with-libedit直ってない

どーしよー♪ どーしよー♪readlineはGPLだけどlibeditはBSDライセンスだからという理由で使おうとすると、mysqlクライアントの対話モードで日本語入力できない現象がまだ直ってません。日本語入力できるようにする前のEmacsみたいに、うちこんだ瞬間に空文字…

--with-mysqld-ldflags=-static

通常、MySQLに限らずC/C++等のネイティブな言語で書かれたプログラムをビルドする際には、依存ライブラリに対してstaticなリンクを行う方法とdynamicなリンクを行う方法の2つの方法がコンパイラから提供されています。MySQLでは「全部Staticで」「全部Dynami…

PIC - Position Independent Codeについて

PICとは 任意のアドレスにロード可能なコードのこと。データのアクセスやジャンプは相対アドレスで行われます。 共有ライブラリはPICでコンパイルする PICでコンパイルすることで共有ライブラリが意図している本来の機能を発揮できます。PICでないと実行時の…

configure --with-extra-charsetsについて

この"--with-extra-charsets"オプションは、以下のように説明されています。 --with-extra-charsets=CHARSET,CHARSET,... Use charsets in addition to default (none, complex, all, or a list selected from the above sets)つまりデフォルトの文字コード(…

LOAD DATAコマンドを調べる

基本的な特徴 トランザクション対応、InnoDBではrollbackできる。 内部ではbulk insert風の処理。 SQLパーサ部分 sql/sql_yacc.yyにて。SQLコマンドはSQLCOM_LOADらしい。 load_data: load_data_lock opt_local INFILE TEXT_STRING_filesystem { LEX *lex=Le…

新プロダクト MySQL Proxy リリース

MySQL Proxyなる新プロダクトがリリースされました。ただしまだver0.5.0なので安定版がでるのはかなり先だと思われますが。 MySQL Proxyとは? MySQL Proxyは従来のMySQLクライアントとサーバの間に置くことで、以下のような機能を実現してくれるデーモンプロ…

SHOW OPEN TABLESのまとめ

テーブルロックの状況確認に付いて。 構文 SHOW OPEN TABLES [FROM db_name] [LIKE 'tbl_name_pattern']; カラムの意味 [test] > show open tables from test; +----------+-------+--------+-------------+ | Database | Table | In_use | Name_locked | +-…

SHOW系コマンドとinformation_schemaデータベースの関係

MySQLではver5.0からinformation_schema対応が行われています。information_schemaですが、これはANSI標準SQL2003かなにかで定義されている機能のひとつで、RDBMSからテーブル等に関するメタ情報を取得したいときに使えるRDBMS間共通のインタフェースとして…

Sort系ステータス変数について

概要 http://dev.mysql.com/doc/refman/5.0/en/server-status-variables.html マニュアルでは以下のように説明されている。 変数名 意味 Sort_range レンジを使用して行われたソートの回数。 Sort_scan テーブルをスキャンすることによって行われたソートの…

#mysql-devチャンネルがirc.freenode.netに開設

ソース:http://lists.mysql.com/internals/34757irc.freenode.netに#mysql-devチャンネルが開設されたようです。これまではMySQL社員だけがアクセスできるサーバ上にしかなかったようですが、ここ最近のMySQLの開発体制のバザール化に伴い、IRCも公開される…

configure --with-server-suffix

既存の公式バイナリではこのオプションをどのように使っているかというと、、、 mysql-max-5.0.20-linux-i686-glibc23.tar.gz"--with-server-suffix=-max"といったように、configureオプションの違いを明示するために使っているみたい。あるいは、こんな感じ…

mtr stands for mysql-test-run.pl

いつのまにかmtrで実行できるようになっていた。 lrwxrwxrwx 1 mir oss 17 6月 16 14:17 mtr -> mysql-test-run.pl* -rwxr-xr-x 1 mir oss 32425 6月 16 13:52 mysql-stress-test.pl* lrwxrwxrwx 1 mir oss 17 6月 16 14:17 mysql-test-run -> mysql-test-ru…

subversionで管理しているbitkeeperソースのパッチ作成スクリプト

こんな感じでうまくいった。新しい方のディレクトリに存在する実体ファイルのみがdiff対象というやり方。 mir@mouse:/usr/local/bin$ cat diff-bk.sh #!/bin/sh if [ $# -lt 2 ]; then echo "usage: diff-bk.sh src1 src2" exit 1 fi cd $2 find . -type f |…

Explainの入口

JOIN:execからselect_describe。 #0 select_describe (join=0xff90870, need_tmp_table=false, need_order=false, distinct=false, message=0x0) at sql_select.cc:14969 #1 0x0000000000637881 in JOIN::exec (this=0xff90870) at sql_select.cc:1645 #2 0x…

nkjm氏「Innodbのリカバリ機能を検証してみる」

Tritonn開発の相棒nkjm氏だが、オイラがsubversionと悪戦苦闘を繰り広げていた最中、InnoDBと戯れていたみたいだ。Innodbのリカバリ機能を検証してみる http://nkjmkzk.net/?menu=blog&service=view&id=39 結論としては、リカバリ時間は単にログファイルの容量…

5.0.42のtagがbitkeeperにできた

http://mysql.bkbits.net:8080/mysql-5.0/?PAGE=cset&REV=mysql-5.0.42父さん!やっとできたよ!というわけで日付を見ると5weeks ago。えぇぇぇぇ。5週間もどこに隠れてたんだろwついでに、いつのまにかclone-4.1.23-buildもできてた。4週間前って、んな馬…

結果をクエリキャッシュに格納するタイミングについて

SELECT文が投げられた場合、sql/sql_parse.ccの以下の2667行目付近を通過する。これはSQLCOMのswitchがSQLCOM_SELECTと判定されて、かつExplainではないと判定された場合の、パーサ処理完了後かつオプティマイザ処理開始前に走るコード(のはず)。 else { i…