[Senna-dev 573] Re: MySQL5.0でのパフォーマンス悪化 及び 2indパッチの不具合の件

Back to archive index

Tetsuro IKEDA ikdtt****@gmail*****
2007年 4月 24日 (火) 19:44:21 JST


こんにちは。池田@tritonnプロジェクトです。

うたださん、情報ありがとうございます。
よろしければ以下についてもいただけないでしょうか?

- show statusで得ることができる"Handler_XXX" (XXXにはHandler API
の名前が入る)の値が、遅いキーワードと速いキーワードでそれぞれ
どのようになっているか。
# 投げる前にflush statusを実行して値をクリアして取得してみてください。

- 遅いキーワードの時のvmstat等によるリソースのボトルネック

07/04/24 に Katsuya Utada<utada****@themi*****> さんは書きました:
> お世話になっております
> うただです
>
>  |2ind機能はまだ未完成の部分がある&不具合があると認識しております。
>  |こうした具体的な情報は非常にありがたいです。
> 2ind利用時のパフォーマンスに関してですが
> 当方でもMySQL5.0.37+tritonn-1.0.2.mysql-5.0.37.senna-1.0.4(ngram)
> の環境で、特定のキーワードで応答が極端に遅くなる場合があります。
> 2ind ON/OFF時でも応答時間に変化は見られませんでした。。
> 遅延の発生する条件が分かりませんが、
> 一応情報としてレポートさせて頂きます。
>
> 安定性が上がったのは大変助かっております。
> 今後の改良に期待致しております。
>  |mysql> show senna status\G
>  |*************************** 1. row ***************************
>  |                  Table: sitest
>  |               Key_name: keywords
>  |            Column_name: keywords
>  |               Encoding: euc_jp
>  |             Index_type: NGRAM
>  |              Normalize: ON
>  |            Split_alpha: OFF
>  |            Split_digit: OFF
>  |           Split_symbol: OFF
>  |     Initial_n_segments: 512
>  |        Senna_keys_size: 4624378
>  |   Senna_keys_file_size: 113319936
>  |     Senna_lexicon_size: 2503513
>  |Senna_lexicon_file_size: 67182592
>  |     Senna_inv_seg_size: 181833728
>  |   Senna_inv_chunk_size: 485888000
>
>  |mysql> select count(*) from sitest where match(keywords) against('コン');
>  |+----------+
>  || count(*) |
>  |+----------+
>  ||   371907 |
>  |+----------+
>  |1 row in set (0.11 sec)
>  |
>  |mysql> select count(*) from sitest where match(keywords) against('パソコン');
>  |+----------+
>  || count(*) |
>  |+----------+
>  ||   278108 |
>  |+----------+
>  |1 row in set (30.95 sec)
>
>
>
> On Wed, 28 Mar 2007 20:05:47 +0900, Tetsuro IKEDA wrote:
>  |こんにちは。池田@Tritonnプロジェクトです。
>  |
>  |2ind機能はまだ未完成の部分がある&不具合があると認識しております。
>  |こうした具体的な情報は非常にありがたいです。
>  |
>  |またTritonnでのMySQL 4.1対応ですが、他にもいろいろなTODOがあり、
>  |何を優先して行うかは議論のあるところなのですが、
>  |こうした要望をいただけますと、非常に参考になります。
>  |ありがとうございます。
>  |
>  |07/03/28 に 坂根 有<sakan****@skygr*****> さんは書きました:
>  |> お世話になります。坂根と申します。
>  |>
>  |> 先日、末長様へ個人的にメールさせて頂きましたが
>  |> MLのほうで報告をすればサポートできるかもというこでしたので
>  |> 期待を込めてメールさせていただきます。
>  |>
>  |> 何点か不具合と思われる現象がありました。
>  |>
>  |> 動作確認環境は以下の通りです。
>  |>
>  |> 環境1
>  |> mysql-5.0.37 +  tritonn-1.0.0.mysql-5.0.37.senna-1.0.2
>  |> Senna 1.02
>  |> MeCab
>  |>
>  |> 環境2
>  |> mysql-4.1.22 + 4.122用MySQLバインディングパッチ(末長様に頂きました)
>  |> Senna 1.03
>  |> MeCab
>  |>
>  |> 使用テーブル
>  |>
>  |> CREATE TABLE `blog_items` (
>  |>   `blogid` int(11) NOT NULL default '0',
>  |>   `itemid` int(11) NOT NULL default '0',
>  |>   `commentid` int(11) NOT NULL default '0',
>  |>   `title` varchar(160) NOT NULL default '',
>  |>   `body` text NOT NULL,
>  |>   `more` text NOT NULL,
>  |>   `blog` int(11) NOT NULL default '0',
>  |>   `author` varchar(60) NOT NULL default '',
>  |>   `wdate` date NOT NULL default '0000-00-00',
>  |>   `wtime` datetime NOT NULL default '0000-00-00 00:00:00',
>  |>   `closed` tinyint(2) NOT NULL default '0',
>  |>   `draft` tinyint(2) NOT NULL default '0',
>  |>   `catid` int(11) NOT NULL default '0',
>  |>   `search` text NOT NULL,
>  |>   PRIMARY KEY  (`blogid`,`itemid`,`commentid`),
>  |>   KEY `date_idx` (`wdate`),
>  |>   KEY `wtime_idx` (`wtime`),
>  |>   FULLTEXT KEY `author_full_idx` (`author`),
>  |>   FULLTEXT KEY `search_full_idx` (`search`)
>  |> ) ENGINE=MyISAM DEFAULT CHARSET=ujis;
>  |>
>  |> 一回FULLTEXT INDEXは消して
>  |> ALTER TABLE blog_items ADD FULLTEXT author_full_idx USING NGRAM (author), ADD FULLTEXT search_full_idx (search);
>  |> で作り直しました。
>  |>
>  |>  CREATE TABLE `master_blog` (
>  |>    `blog_id` int(11) NOT NULL auto_increment,
>  |>    `blog_name` varchar(100) NOT NULL default '',
>  |>    `blog_dir` varchar(20) NOT NULL default '',
>  |>    `blog_dbname` varchar(20) NOT NULL default '',
>  |>    `blog_url` varchar(100) NOT NULL default '',
>  |>    `search_flag` tinyint(4) NOT NULL default '0',
>  |>    `sum_flag` int(11) NOT NULL default '1',
>  |>    `access_group` text NOT NULL,
>  |>    `partner_flg` tinyint(4) NOT NULL default '0',
>  |>    `daredemo_flg` tinyint(4) NOT NULL default '0',
>  |>    `status` varchar(20) NOT NULL default '',
>  |>    PRIMARY KEY  (`blog_id`)
>  |>  ) ENGINE=MyISAM  DEFAULT CHARSET=ujis PACK_KEYS=0 AUTO_INCREMENT=231
>  |>  ;
>  |>
>  |> データはblog_itemsには35万レコード,master_blogには231レコードは行っております。
>  |>
>  |> まず以下の比較的簡単なクエリで4.1環境では0.2秒で終わるクエリが
>  |> 5.0環境では20秒近くかかり極端にパフォーマンスが落ちました。
>  |>
>  |> 実行した SQL:
>  |> SELECT SQL_CALC_FOUND_ROWS *
>  |> FROM blog_items
>  |> LEFT JOIN master_blog ON blog_items.blogid = master_blog.blog_id
>  |> WHERE blog_items.blogid = 5 LIMIT 0 , 100
>  |>
>  |> 4.1環境でのEXPLAIN結果
>  |> id  select_type  table  type  possible_keys  key  key_len  ref  rows
>  |> Extra
>  |> 1 SIMPLE blog_items ref PRIMARY PRIMARY 4 const 28378 Using where
>  |> 1 SIMPLE master_blog eq_ref PRIMARY PRIMARY 4 bcounter.blog_items.blogid 1
>  |>
>  |> 5.0環境でのEXPLAIN結果
>  |> id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra
>  |> 1 SIMPLE blog_items ref PRIMARY PRIMARY 4 const 36801
>  |> 1 SIMPLE master_blog const PRIMARY PRIMARY 4 const 1
>  |>
>  |> パッチを当てていないMYSQL5.0でも検証しても
>  |> 起こるためMYSQL5.0の問題と思っております。
>  |>
>  |> そこで5.0ではパフォーマンスがでないため
>  |> 末長様にMYSQL4.1.22用のパッチを頂きました。
>  |>
>  |> MYSQL4.1では全体的にパフォーマンスもよく検索できておりましたが
>  |> バグと思われる挙動があり困っております。(MYSQL5.0+Tritonn環境でも発生します)
>  |>
>  |> ------------------------------------------------------------------------------------------
>  |> 1点目 0件目からのLimitでない場合結果が取得できない。
>  |> ------------------------------------------------------------------------------------------
>  |> 以下のクエリは正常に結果が取得できます。
>  |> SELECT * FROM blog_items
>  |> LEFT JOIN master_blog ON blog_items.blogid = master_blog.blog_id
>  |> WHERE MATCH (search) AGAINST ('test') AND master_blog.search_flag =1
>  |> LIMIT 0,10
>  |>
>  |> ところが以下のようにLIMITで0件目からの取得でない場合結果が空になります。(カウントでは200件あります)
>  |> SELECT * FROM blog_items
>  |> LEFT JOIN master_blog ON blog_items.blogid = master_blog.blog_id
>  |> WHERE MATCH (search) AGAINST ('test') AND master_blog.search_flag =1
>  |> LIMIT 10,10
>  |> ------------------------------------------------------------------------------------------
>  |>
>  |> ------------------------------------------------------------------------------------------
>  |> 2点目 SQL_CALC_FOUND_ROWSで総件数を取得する場合limitの値で総件数が変動します。
>  |> ------------------------------------------------------------------------------------------
>  |> SELECT SQL_CALC_FOUND_ROWS * FROM blog_items WHERE MATCH (search)
>  |> AGAINST ('test') AND (master_blog.search_flag = 1) limit 120,10
>  |>
>  |> と
>  |>
>  |> SELECT SQL_CALC_FOUND_ROWS * FROM blog_items WHERE MATCH (search)
>  |> AGAINST ('test') AND (master_blog.search_flag = 1) limit 10,10
>  |>
>  |> では違う件数になってしまいます。
>  |> ------------------------------------------------------------------------------------------
>  |>
>  |> 2indパッチを当てずに検証しましたところ発生いたしませんでした。
>  |>
>  |> 現状2indパッチを使用しない形で実運用に組み込もうと考えておりますが
>  |> 今後のことが少々不安ですのでTritonnプロジェクトでの
>  |> 4.1系の開発を要望としてあげさせていただきます。
>  |>
>  |> 以上よろしくお願いいたします。
>  |>
>  |> _______________________________________________
>  |> Senna-dev mailing list
>  |> Senna****@lists*****
>  |> http://lists.sourceforge.jp/mailman/listinfo/senna-dev
>  |>
>  |
>  |_______________________________________________
>  |Senna-dev mailing list
>  |Senna****@lists*****
>  |http://lists.sourceforge.jp/mailman/listinfo/senna-dev
>  |
>  |
>
> ---
> Katsuya Utada <utada****@themi*****>
>
> _______________________________________________
> Senna-dev mailing list
> Senna****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/senna-dev
>




Senna-dev メーリングリストの案内
Back to archive index