ChangeLog 最新ページ

MySQL - KazLog ChangeLog

最終更新時間: 2009-05-28 23:58

2008-07-27 Sun

SennaでLocked [MySQL]

MySQLが止まる場合がある。

$ mysqladmin processlist

をみると、デッドロックになってしまっている状況が分かる。


参考

http://lists.sourceforge.jp/mailman/archives/senna-dev/2006-September/000346.html


この状況が起こったら、drop table ; create tableをするしかないようだ。

FULLTEXTを頻繁にUPDATE/INSERTする場合の処理速度の関係上、Sennaを離れるわけには行かないので。

2008-03-23 Sun

MySQL 形態素 vs. N-gram [MySQL]

  • ベンチマークの比較記事を探したが,無い
    • MATCH AGAINSTの速さ
    • MATCH AGAINSTで返されるscoreの,感覚的正確性
  • ただ,結局tag_scoreをリモートにおいて,効率を高める戦略を取ることの効果はわかっていて,方針を変えるつもりはないので,従来通り「形態素」で.

2008-03-23 Sun

MySQL ujis vs. utf8 [MySQL]

  • MySQL 4.1.1 以降なら,utf8でFULLTEXT全文検索が可能.
    • 4.1.1以降なら,ujis/sjis/utf8 どれでも可能らしい.
  • 利点
    • utf8化するとDBの使用容量が減る.
      • title_kakasi, comments_kakasiも要らなくなる.
  • 欠点
    • サーバの通信量が1.5倍に増える懸念がある
  • リモートが3.xからアップデートされたとはいえ, 4.0.22だ.結局従来通り「packed string」のまま.

2008-03-23 Sun

MySQL FULLTEXT vs. INSERT/UPDATE トレードオフ [ToDo][MySQL]

  • SELECT MATCH (title_kakasi) AGAINST ('0000'),MATCH (comments_kakasi) AGAINST ('0000') FROM file_data WHERE MATCH(title_kakasi) AGAINST('0000') OR MATCH(comments_kakasi) AGAINST('0000');
    • を行いscoreを獲得したいとき,title_kakasiとcomments_kakasiはFULLTEXTでないといけない
  • しかし,FULLTEXTであると,INSERT/UPDATEで異常に重くなる.
  • INDEX を削除するため以下を用いると,
    • ALTER TABLE file_data DROP INDEX comments_kakasi
      • を行うと,30秒ほど時間を要する.
    • ALTER TABLE file_data DROP INDEX title_kakasi
      • を行うと,15秒ほど時間を要する.
    • ALTER TABLE file_data ADD INDEX comments_kakasi など,ADDの時間を考慮すると,総計1分半に1度くらいしか登録できないので,現実的では無い.
  • uri,title_kakasi,comments_kakasiを別テーブルにコピー
    • して隔離しようとも考えたが,結局FULLTEXT化されたテーブルにINSERT/UPDATEを繰り返すことになるので,パフォーマンスのアップに繋がるかどうかは極めて疑問.
  • Senna

$ rpm -qa | grep -i mysql

79:MySQL-python-1.2.0-3.2.2

283:mysqlclient14-4.1.14-4.2

415:perl-DBD-MySQL-3.0002-2.2.2

451:libdbi-dbd-mysql-0.8.1a-1.2.1

567:mysql-devel-5.0.18-2.1

568:php-mysql-5.1.2-5

701:mysql-5.0.18-2.1

737:mysql-connector-odbc-3.51.12-1.2.1

942:mysql-server-5.0.18-2.1

1001:mysqlclient14-devel-4.1.14-4.2


$ sudo rpm -e mysql mysql-server mysql-devel

error: Failed dependencies:

libmysqlclient.so.15 is needed by (installed) perl-DBD-MySQL-3.0002-2.2.2.i386

libmysqlclient.so.15 is needed by (installed) dovecot-1.0-0.beta2.7.i386

libmysqlclient.so.15 is needed by (installed) mysql-connector-odbc-3.51.12-1.2.1.i386

libmysqlclient.so.15 is needed by (installed) libdbi-dbd-mysql-0.8.1a-1.2.1.i386

libmysqlclient.so.15 is needed by (installed) php-mysql-5.1.2-5.i386

libmysqlclient_r.so.15 is needed by (installed) MySQL-python-1.2.0-3.2.2.i386

libmysqlclient_r.so.15 is needed by (installed) mysql-connector-odbc-3.51.12-1.2.1.i386

mysql is needed by (installed) MySQL-python-1.2.0-3.2.2.i386

mysql is needed by (installed) libdbi-dbd-mysql-0.8.1a-1.2.1.i386


$ sudo rpm -e mysql mysql-server mysql-devel perl-DBD-MySQL dovecot mysql-connector-odbc libdbi-dbd-mysql php-mysql MySQL-python


$ sudo rpm -i mecab-0.96-tritonn.1.0.9.i386.rpm

$ sudo rpm -i mecab-ipadic-2.7.0.20070801-tritonn.1.0.9.i386.rpm

$ sudo rpm -i senna-1.1.0-tritonn.1.0.9.i386.rpm

$ sudo rpm -i MySQL-shared-5.0.51a-tritonn.1.0.9.i386.rpm

$ sudo rpm -i MySQL-client-5.0.51a-tritonn.1.0.9.i386.rpm

$ sudo rpm -i MySQL-server-5.0.51a-tritonn.1.0.9.i386.rpm


$ cd /media/disk/Fedora/RPMS

$ sudo rpm -Uhv perl-DBD-MySQL-3.0002-2.2.2.i386.rpm dovecot-1.0-0.beta2.7.i386.rpm mysql-connector-odbc-3.51.12-1.2.1.i386.rpm libdbi-dbd-mysql-0.8.1a-1.2.1.i386.rpm php-mysql-5.1.2-5.i386.rpm MySQL-python-1.2.0-3.2.2.i386.rpm


$ mysql

mysql> ALTER TABLE file_data ADD FULLTEXT INDEX ft USING SECTIONALIZE (title_kakasi,comments_kakasi);

mysql> SELECT MATCH(title_kakasi,comments_kakasi) AGAINST("*D+ *W1:3,2:2 A5EDA5EA B5F0C6FD") AS score FROM file_data WHERE MATCH(title_kakasi,comments_kakasi) AGAINST("*D+ *W1:3,2:2 A5EDA5EA B5F0C6FD" IN BOOLEAN MODE) ORDER BY score DESC LIMIT 10;

Empty set


# 問題点

# 1) どうも *D+ と *W を並行して使えないようだ.

# 2) また,*D+を取り除いてみたが,scoreが整数の値しか返ってこない.

# 結論

# SECTIONALIZEは使用せず,scoreに関しては従来のMySQLに任せる

#


# ALTER TABLE file_data ADD FULLTEXT ft_file_data_comments_kakasi (comments_kakasi);

# ALTER TABLE file_data ADD FULLTEXT ft_file_data_title_kakasi (title_kakasi);

# ALTER TABLE img_data ADD FULLTEXT ft_img_data_comments_kakasi (comments_kakasi);

# ALTER TABLE img_data ADD FULLTEXT ft_img_data_title_kakasi (title_kakasi);

# ALTER TABLE yourfilehost_data ADD FULLTEXT ft_yourfilehost_data_comments_kakasi (comments_kakasi);

# ALTER TABLE yourfilehost_data ADD FULLTEXT ft_yourfilehost_data_title_kakasi (title_kakasi);

# ALTER TABLE tag ADD FULLTEXT ft_tag_kakasi (kakasi);


  • - mysqldumpで 88MB のdumpファイルが,インポートすると,1.3GBにまでふくれあがる.
    • MATCH AGAINSTで返されるスコアが,小数点以下が切り捨てられた整数で返される.

2008-01-17 Thu

2008-01-12 Sat

SQL Tips [MySQL]

  • FULLTEXTが重いとき

SQL> alter table hoge drop index myText;

SQL> ...全件ロード処理...

SQL> alter table hoge add fulltext(myText);

cf.http://www.tatamilab.jp/rnd/archives/000389.html

ローカルでINSERT/UPDATEするスクリプトを走らせる時は,必ずdropしておくこと。

  • tableの定義内容を知りたい

SQL> show columns from file_data;

その他の情報提示手法を含めて以下のリンクを参照。

cf. http://dev.mysql.com/doc/refman/4.1/ja/show.html

  • tableの要素を変更

SQL> ALTER TABLE site_list MODIFY time DATETIME;

2008-01-01 Tue

MySQL文字化け [MySQL][PHP]

  • 「CREATE DATABASE」時に、「DEFAULT CHARSET=ujis」を忘れない
  • MySQLとPHPの接続確立後、「SET NAMES ujis 」をセッションごとに実行

もしくは、MySQLとPHPの接続確立後、「SET NAMES binary 」をセッションごとに実行

2007-09-09 Sun

using MySQL from C++ via MySQL++ (on Cygwin) [Windows][Cygwin][MySQL][C++]

  • MySQL インストール
    • essentialではなく、ZIP/Installerをダウンロード, インストール.コンフィグ (D:\MySQL)
    • $ net stop mysql
    • (以前のdataがあれば) MySQL\data を以前のdataで上書きリプレース
    • $ net start mysql
  • MinWG インストール
  • [already not used now] mysql++ インストール (MinGW)
    • $ cd d:\MySQL; tar zxvf mysql++-2.3.2.tar.gz
    • $ cd D:\MySQL\lib\opt
    • $ dlltool -k -d d:\MySQL\mysql++\libmysqlclient.def -l libmysqlclient.a
    • $ vi Makefile.mingw
      • comment out "if exist $@ del $@"
      • replace-string "C:\Program Files\MySQL Server\" to "D:\MySQL\"
    • $ mingw32-make -f Makefile.mingw
  • mysql++ インストール (genuin Cygwin)
  • mysql++ インストール(linux)
    • install gcc-c++, libstdc++-devel ,zlib-devel (from rpm)
  • sample program (indicate FULL PATH)
    • $ cd /tmp
    • $ g++ -c -o simple1_simple1.o -mthreads -g -Ilib -D_UNICODE -DMYSQLPP_NO_DLL -I"D:\MySQL\include" -I"D:\MySQL\mysql++-2.3.2\lib" -MTsimple1_simple1.o -MFsimple1_simple1.o.d -MD "D:\MySQL\mysql++-2.3.2\examples\simple1.cpp"
    • $ g++ -o simple1.exe simple1_simple1.o -mthreads -g -L. -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc -L"D:\MySQL\mysql++-2.3.2" -L"D:\MySQL\lib\opt" -lmysqlpp_util -lmysqlclient -lmysqlpp
    • $ cp "D:\MySQL\mysql++-2.3.2\mysqlpp.dll" .
      • OR $ cp "D:\MySQL\mysql++-2.3.2\mysqlpp.dll" "C:\WINDOWS\system32"
    • $ ./simple1.exe
  • Xerces
  • 弱った。mysql++はMinGWでコンパイルが通るがcygwinでは通らない。逆に、Xerces-cは、Cygwinでは通るがMinGWでは通らない。こっちがたてばあちらがたたず。


2007-09-01 Sat

0001.pl (main{) [Windows][Cygwin][Perl][MySQL]

  • Perl on Cygwin から MySQL にアクセスするときは、DBI/DBDではなく(ソースからのコンパイルは通らない)、Net::MySQLを使うこと。

http://sonic64.com/2004-10-11.html

  • Digest::SHA1 がないとエラーになるので、以下のrpmからインストールする。(ソースからのコンパイルは通らない)

http://d.hatena.ne.jp/Bayside/20070806/p1