Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
MySQL 5.7 InnoDB
日本語全文検索(その3)
Yoshiaki Yamasaki / 山﨑 由章
MySQL Senior Sales Consultant, Asia Pacific and Japan
updated: 2016/09/29
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Safe Harbor Statement
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。
また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはでき
ません。以下の事項は、マテリアルやコード、機能を提供することをコミットメントするも
のではない為、購買決定を行う際の判断材料になさらないで下さい。
オラクル製品に関して記載されている機能の開発、リリースおよび時期については、
弊社の裁量により決定されます。
2
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
これまでの資料
• MySQL 5.7 InnoDB 日本語全文検索
http://www.slideshare.net/yoyamasaki/20160209-inno-dbftsjp
• MySQL 5.7 InnoDB 日本語全文検索(その2)
http://www.slideshare.net/yoyamasaki/mysql-57-innodb
3
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
少し復習します
4
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
全文検索機能の仕組み
5
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
全文検索インデックス
• トークンと文章の関係を表現した転置インデックス
6
This movie is
about a boy
going to war.
This movie
is about a
girl starting
an auto-
shop.
This movie is
about
flowers.
a about
an are as
at be by
com de
en for
from
how i in
is it la of
on or
that the
this to
was
what
when
where
who will
with und
the
www
Min
Token
Size
Max
Token
Size
Document 1
Document 2
Document 3
Stop Words Token Size
Full Text / Inverted Index
ID TOKEN DOCUMENT
1 movie 1,2,3
2 boy 1
3 girl 2
4 going 1
5 starting 2
6 war 1
7 auto-shop 2
8 flowers 3
Token FiltersDocuments
Tokenizer
Tokenizer
Indexer
Indexer
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
InnoDB全文検索機能の日本語対応
7
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
全文検索機能の日本語対応とは?
• 日本語の文章を字句解析して、全文検索用のインデックスを作成できる
– 英語などは、スペースを区切り文字として字句解析できるが、
日本語には区切り文字が無いため、追加の字句解析機能が必要
8
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
MySQL 5.7でサポートされた日本語の字句解析方法
• N-gram: 一定の文字数で切りだして字句解析する手法
– デフォルトではbi-gram(2文字単位)
• MeCab:オープンソースの形態素解析エンジン
– 日本語の辞書をベースに字句解析する
9
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
MySQL 5.7での強化点
• N-gramによる日本語、中国語、韓国語サポート
– N文字区切りでトークンを検出
10
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE ORDER BY doc_id, position LIMIT 10;
+--------+--------------+-------------+-----------+--------+----------+
| WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION |
+--------+--------------+-------------+-----------+--------+----------+
| ロー | 1 | 15 | 2 | 1 | 0 |
| ール | 1 | 16 | 3 | 1 | 3 |
| ルと | 1 | 1 | 1 | 1 | 6 |
| とグ | 1 | 1 | 1 | 1 | 9 |
| グル | 1 | 7 | 2 | 1 | 12 |
| ルー | 1 | 16 | 3 | 1 | 15 |
| ープ | 1 | 7 | 2 | 1 | 18 |
| プベ | 1 | 1 | 1 | 1 | 21 |
| 環境 | 1 | 1 | 1 | 1 | 21 |
| ベー | 1 | 7 | 4 | 1 | 24 |
+--------+--------------+-------------+-----------+--------+----------+
10 rows in set (0.01 sec)c
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
MySQL 5.7での強化点
• MeCabによる日本語サポート
– MeCab(オープンソースの日本語辞書)を使ってトークンを検出
11
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE ORDER BY doc_id, position LIMIT 10;
+--------------------+--------------+-------------+-----------+--------+----------+
| WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION |
+--------------------+--------------+-------------+-----------+--------+----------+
| ロール | 1 | 1 | 1 | 1 | 0 |
| グループ | 1 | 7 | 2 | 1 | 12 |
| 環境 | 1 | 1 | 1 | 1 | 21 |
| ベース | 1 | 7 | 2 | 1 | 24 |
| アクセス | 1 | 1 | 1 | 1 | 36 |
| コントロール | 1 | 1 | 1 | 1 | 48 |
| により | 1 | 1 | 1 | 1 | 66 |
| mysql | 1 | 16 | 12 | 1 | 78 |
| dba | 1 | 16 | 4 | 1 | 83 |
| きめ細か | 1 | 1 | 1 | 1 | 91 |
+--------------------+--------------+-------------+-----------+--------+----------+
10 rows in set (0.00 sec)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
その他
• InnoDB日本語全文検索機能の使用方法は、1回目の資料参照
– 事前準備
– 全文検索インデックス作成方法
– 転置インデックス確認方法
• MySQL 5.7では、日本語全文検索がお手軽に使用できる
12
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
その他
• 全文検索関数の使い方や関連性ランキングについては、
2回目の資料参照
– 全文検索関数の構文
– AND、OR、NOT検索
– 重みづけの変更方法
• MySQL 5.7の日本語全文検索は、一致するドキュメントを探すだけでなく、
検索ワードと関連の強いドキュメントを探す場合にも役立つ
13
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
復習終わり
14
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワードの設定
15
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワードとは?
• 全文検索インデックスの対象から外す単語
• 任意でストップワードを追加できる
• 検索対象に含める必要のない単語をストップワードに指定することで、
インデックスサイズの縮小によるパフォーマンス向上が期待できる
– 検索ワードとして指定しない単語
– 大半の文章に含まれていて、絞り込みの役に立たない単語
16
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワードの設定方法
1.ストップワードを格納するためのテーブルを作成する
2.必要なシステム変数を設定する
3.ストップワードを”1.”で作成したテーブルに格納する
※追加したストップワードを反映させるためには、
全文検索インデックスの再作成が必要
17
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
設定例:ストップワード用のテーブル作成
• varchar型のvalue列のみを持つテーブルを作成する
• テーブル名は任意でOK
18
CREATE TABLE mecab.stopwords(value varchar(255) PRIMARY KEY);
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
設定例: システム変数の設定
• my.cnfに以下を設定して再起動する
– innodb_ft_enable_stopword
(デフォルトでON)
– innodb_ft_server_stopword_table
(SETコマンドで動的に変更も可能)
• innodb_ft_server_stopword_tableは、“スキーマ名/テーブル名”の
形式で指定する
19
character_set_server=utf8mb4
loose-mecab-rc-file=/usr/local/mysql/lib/mecab/etc/mecabrc
innodb_ft_min_token_size=2
innodb_ft_enable_stopword=ON
innodb_ft_server_stopword_table=mecab/stopwords
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
設定例:ストップワードの追加
• innodb_ft_server_stopword_tableで指定したテーブルに追加したい
ストップワードをINSERTする
• 追加したストップワードを反映させるためには、全文検索インデックスの
再作成が必要
20
INSERT INTO mecab.stopwords VALUES('など'),('および'),('こと'),('でき
'),('ます'),('mysql');
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
補足
• 特定のテーブルに独自のストップワードを設定したい場合には、
innodb_ft_user_stopword_tableを利用する
• innodb_ft_user_stopword_tableはセッション単位で設定変更出来るため、
innodb_ft_user_stopword_tableの設定を変えてから全文検索インデック
スを作成する
• innodb_ft_user_stopword_tableを設定した場合、
innodb_ft_server_stopword_tableは無視される
21
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワードの指定例
22
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
サンプルテーブル
• サンプルテーブルのテーブル定義
– description列にMeCabパーサーを使用して全文検索インデックスを作成
• サンプルテーブルに格納した文章
– MySQL Enterprise Monitorのページ(※)に記載されている説明文をtitle列、
description列に格納(2016年9月20日時点のもの)
※https://www-jp.mysql.com/products/enterprise/monitor.html
23
mysql> show create table articles¥G
*************************** 1. row ***************************
Table: articles
Create Table: CREATE TABLE `articles` (
`FTS_DOC_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) DEFAULT NULL,
`description` text,
PRIMARY KEY (`FTS_DOC_ID`),
FULLTEXT KEY `mecab_idx` (`description`) /*!50100 WITH PARSER `mecab` */
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
サンプルテーブルに格納した文章
24
※格納した文章の一覧を、資料後半のAppendix部分に掲載しています
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワード設定前
• 転置インデックスは583件作成されている
25
mysql> SET GLOBAL innodb_ft_aux_table="mecab/articles";
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT count(*) FROM
INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
+----------+
| count(*) |
+----------+
| 583 |
+----------+
1 row in set (0.00 sec)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワード設定前
• 「ます」、「でき」、「する」など、検索で指定しないトークンや、ほとんどの
文章に含まれている単語(「mysql」)にも転置インデックスが作成されている
26
mysql> SELECT word,count(*) AS c FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE
GROUP BY word ORDER BY c DESC LIMIT 10;
+-----------------------+----+
| word | c |
+-----------------------+----+
| ます | 33 |
| mysql | 21 |
| パフォーマンス | 13 |
| でき | 12 |
| 使用 | 11 |
| する | 11 |
| 監視 | 9 |
| サーバー | 9 |
| enterprise | 8 |
| セキュリティ | 7 |
+-----------------------+----+
10 rows in set (0.00 sec)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワードの設定
• ストップワードを設定するためのテーブルを作成し、
ストップワードを格納する
27
mysql> CREATE TABLE mecab.stopwords(value varchar(255) PRIMARY KEY);
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO mecab.stopwords VALUES('ます'),('でき'),('する'),('mysql');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM mecab.stopwords;
+--------+
| value |
+--------+
| mysql |
| する |
| でき |
| ます |
+--------+
4 rows in set (0.00 sec)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワードの設定
• my.cnfに以下を設定して再起動
– innodb_ft_enable_stopword=ON
– innodb_ft_server_stopword_table=mecab/stopwords
28
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワードの設定
• 全文検索インデックスの再作成
29
mysql> ALTER TABLE mecab.articles DROP KEY mecab_idx;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE mecab.articles ADD FULLTEXT KEY mecab_idx(description)
WITH PARSER mecab;
Query OK, 0 rows affected (0.22 sec)
Records: 0 Duplicates: 0 Warnings: 0
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワード設定後
• 転置インデックスが減っている(583件⇒506件)
30
mysql> SET GLOBAL innodb_ft_aux_table="mecab/articles";
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT count(*) FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
+----------+
| count(*) |
+----------+
| 506 |
+----------+
1 row in set (0.00 sec)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ストップワード設定後
• ストップワードで指定した「ます」、「でき」、「する」、「mysql」には
転置インデックスが作成されていない
31
mysql> SELECT word,count(*) AS c FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE
GROUP BY word ORDER BY c DESC LIMIT 10;
+-----------------------+----+
| word | c |
+-----------------------+----+
| パフォーマンス | 13 |
| 使用 | 11 |
| サーバー | 9 |
| 監視 | 9 |
| enterprise | 8 |
| セキュリティ | 7 |
| など | 6 |
| 構成 | 6 |
| 状況 | 6 |
| および | 5 |
+-----------------------+----+
10 rows in set (0.00 sec)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Appendix
32
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 33
サンプルテーブルに格納した文章
mysql> SELECT * FROM mecab.articles¥G
*************************** 1. row ***************************
FTS_DOC_ID: 1
title: レプリケーション・ダッシュボード
description: MySQL Enterprise Monitorは、自動的にレプリケーション・トポロジを検出し、パフォーマンス、可用性、マ
スター/スレーブの状態を表示します。MySQL 5.7にも対応済みで、レプリケーション・ダッシュボードからレプリケーションの各種指
標を確認できます。また、トポロジ・ビューにより、レプリケーション・グループやレプリケーション構成、それぞれのノードの状態など
を素早く確認できます。単純なレプリケーション構成だけでなく、マルチソース・レプリケーションや、循環型、階層型といった複雑な
構成にも対応しています。
*************************** 2. row ***************************
FTS_DOC_ID: 2
title: アクセス制御リスト (ACLs)
description: ロールとグループベースのアクセスコントロールにより、MySQL DBA にきめ細かなセキュリティポリシーを定義
するための簡単な方法を提供します。アクセス制御リストは、MySQL Enterprise Monitor をマルチテナント環境やクラウド環
境で使用している場合のアカウント管理を簡素化します。
*************************** 3. row ***************************
FTS_DOC_ID: 3
title: MySQL Enterprise Firewall 監視
description: グラフとレポートから MySQL Enterprise Firewall のアクティビティを容易に監視でき、MySQL
Server を特定のデータベース攻撃から守ることに役立ちます。ベスト・プラクティス・アドバイザーは、潜在的なセキュリティの脅威
を検知した時に警告を通知し、MySQL Enterprise Firewall や関連するセキュリティ設定の変更を推奨します。
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 34
サンプルテーブルに格納した文章
*************************** 4. row ***************************
FTS_DOC_ID: 4
title: MySQL Enterprise Audit 監視
description: 全てのMySQLサーバーにわたって、MySQL Enterprise Audit の状況を監視します。ベスト・プラクティス・
アドバイザーは、HIPAA、SOX 法、および PCI データセキュリティ基準などの一般的なセキュリティポリシーにおいて、企業の法
令遵守を支援します。
*************************** 5. row ***************************
FTS_DOC_ID: 5
title: MySQL パフォーマンスのリアルタイム監視およびアラート生成
description: MySQL Enterprise Monitor は MySQL クエリーとパフォーマンス関連のサーバー指標を継続的に監視
します。基準となるパフォーマンスのトレンドから大きな逸脱があった場合にアラートを受信します。また、ベストプラクティス・アドバイ
ザは、パフォーマンスを向上させるための構成やパラメータ設定の変更を提案します。
*************************** 6. row ***************************
FTS_DOC_ID: 6
title: MySQL の可用性に関するリアルタイム監視
description: 開発者および DBA は、データベース可用性の監視と測定によって、品質保証契約 (SLA) のコミットメントを満
たしているかを把握できます。
*************************** 7. row ***************************
FTS_DOC_ID: 7
title: クラウドにおける MySQL のリモート監視
description: クラウドおよび VM に対応した設計になっており、リモート・エージェントを必要とせずに、MySQL サーバーをリ
モートで監視できます。
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 35
サンプルテーブルに格納した文章
*************************** 8. row ***************************
FTS_DOC_ID: 8
title: すべての MySQL サーバーを視覚的に管理
description: Visual Dashboard は Web ベースのインタフェースで、データベースのパフォーマンス、可用性、重大イベ
ントなどを全体的に詳しく確認できます。1台のサーバー、カスタム・グループ、またはすべてのサーバーを視覚的に調べます。リア
ルタイム情報や履歴情報の豊富なグラフを使用して、サーバー統計の詳細情報にまでドリルダウンできます。
*************************** 9. row ***************************
FTS_DOC_ID: 9
title: 視覚的にクエリーを解析
description: クエリー・パフォーマンスのリアルタイム監視、実行時統計の確認、遅延の原因になっている SQL コードのフィ
ルタリングと特定が可能です。 MySQL Server 5.6 のパフォーマンス・スキーマを使用すれば、ソフトウェアや構成を追加する
ことなく、データが MySQL サーバーから直接収集されます。
*************************** 10. row ***************************
FTS_DOC_ID: 10
title: 負荷の大きいクエリーの発見と修正
description: 開発者および DBA は、相関グラフを使用して実行時パラメータ(サーバー負荷、スレッド統計、RAM 使用状況
など)を、その時点で実行中であったクエリーと比較できます。グラフ上のタイムスライスを強調表示するだけで、もっとも負荷のかか
るクエリーを発見し、より大きなパフォーマンス問題の潜在的な原因を特定します。
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 36
サンプルテーブルに格納した文章
*************************** 11. row ***************************
FTS_DOC_ID: 11
title: InnoDB の監視
description: MySQL のパフォーマンスに影響を及ぼす重要な InnoDB 指標を監視します。非効率な索引の使用、ロックの
問題、InnoDB バッファ・プール の使用に関するアラートを受信して、現在のパフォーマンスや解析されたトレンドに基づいた
InnoDB 構成を改善する方法についてのヒントを得ることができます。
*************************** 12. row ***************************
FTS_DOC_ID: 12
title: MySQL Cluster の監視
description: パフォーマンスと可用性に影響を及ぼす重要な MySQL Cluster 指標を監視します。グラフを通じて履歴情
報を確認し、データ・ノードのキャッシュ・ヒット率が低い、データ・メモリが枯渇しそうである、ノード障害が発生しそうであるといった潜
在的な問題に関するアラートを受信できます。
*************************** 13. row ***************************
FTS_DOC_ID: 13
title: バックアップの監視
description: MySQL ベストプラクティス・アドバイザは、オンライン・ホット・バックアップが想定どおり実行することを支援し、"
前回の全体バックアップは古すぎるか?"、"増分バックアップは実行中か?"、"前回のバックアップ・ジョブは成功したか?"、"
バックアップのロックの時間が長すぎるか?"などの疑問に回答します。
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 37
サンプルテーブルに格納した文章
*************************** 14. row ***************************
FTS_DOC_ID: 14
title: ディスクの監視
description: トレンドの解析と計画によって、今後必要になる容量を管理者が予測できるようにします。MySQL Enterprise
Monitor は、"ディスク領域が12か月後に一杯になる場合に通知する"といったユーザーが定義したしきい値に基づいて、運用ス
タッフに予防的なアラートを送信します。
*************************** 15. row ***************************
FTS_DOC_ID: 15
title: オペレーティング・システムの監視
description: ロードアベレージ、CPU 使用状況、RAM 使用状況、スワップ使用状況、ファイルシステム使用状況、ディスク
I/O など、オペレーティング・システムレベルのパフォーマンス指標を視覚的にリアルタイムで監視します。
*************************** 16. row ***************************
FTS_DOC_ID: 16
title: セキュリティ上のぜい弱性の特定
description: MySQL Enterprise Monitor は MySQL サーバーを保護し、開発者と DBA がセキュリティ・ホールを発
見し、それに対応するための支援をします。アドバイザによって、 MySQL のセキュリティに関するベストプラクティスを実施するた
めに設計された一連のルールが提供され、潜在的なぜい弱性がシステムに影響を及ぼす前にアラートを送信します。
*************************** 17. row ***************************
FTS_DOC_ID: 17
title: 開発中およびテスト中のチューニングを迅速化
description: 開発中およびテスト中のパフォーマンスに関する問題を発見するまでにかかる時間を大幅に短縮することで、ア
プリケーションをより迅速に本番運用できます。ユーザーよりも先にパフォーマンスの問題を特定して修正できます。
17 rows in set (0.00 sec)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
イベント告知
38
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
今後のセミナー予定
• MySQL 最前線 ~ 2016年秋 最新アップデート
– Oracle Open World 2016で発表された最新情報をフィードバックする
セミナーです
• 主なトピック
– Oracle MySQL Cloud Service
– MySQL8.0 DMR(開発途上版)
– MySQL Cluster7.5 RC(リリース候補版)
– MySQL InnoDB Cluster(MySQL Group Replication + MySQL Router + MySQL Shell)
39
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
今後のセミナー予定
• 日時
– 東京:2016年10月3日(月) 14:00~17:30
– 大阪:2016年10月11日(火) 14:00~17:30
– 名古屋:2016年10月12日(水) 14:00~17:30
– 福岡:2016年10月13日(木) 14:00~17:30
• 申込ページ
– 「mysql イベント」で検索
40
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 41
20160929 inno db_fts_jp

20160929 inno db_fts_jp

  • 1.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | MySQL 5.7 InnoDB 日本語全文検索(その3) Yoshiaki Yamasaki / 山﨑 由章 MySQL Senior Sales Consultant, Asia Pacific and Japan updated: 2016/09/29
  • 2.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. Safe Harbor Statement 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。 また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはでき ません。以下の事項は、マテリアルやコード、機能を提供することをコミットメントするも のではない為、購買決定を行う際の判断材料になさらないで下さい。 オラクル製品に関して記載されている機能の開発、リリースおよび時期については、 弊社の裁量により決定されます。 2
  • 3.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. これまでの資料 • MySQL 5.7 InnoDB 日本語全文検索 http://www.slideshare.net/yoyamasaki/20160209-inno-dbftsjp • MySQL 5.7 InnoDB 日本語全文検索(その2) http://www.slideshare.net/yoyamasaki/mysql-57-innodb 3
  • 4.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 少し復習します 4
  • 5.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 全文検索機能の仕組み 5
  • 6.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 全文検索インデックス • トークンと文章の関係を表現した転置インデックス 6 This movie is about a boy going to war. This movie is about a girl starting an auto- shop. This movie is about flowers. a about an are as at be by com de en for from how i in is it la of on or that the this to was what when where who will with und the www Min Token Size Max Token Size Document 1 Document 2 Document 3 Stop Words Token Size Full Text / Inverted Index ID TOKEN DOCUMENT 1 movie 1,2,3 2 boy 1 3 girl 2 4 going 1 5 starting 2 6 war 1 7 auto-shop 2 8 flowers 3 Token FiltersDocuments Tokenizer Tokenizer Indexer Indexer
  • 7.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. InnoDB全文検索機能の日本語対応 7
  • 8.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 全文検索機能の日本語対応とは? • 日本語の文章を字句解析して、全文検索用のインデックスを作成できる – 英語などは、スペースを区切り文字として字句解析できるが、 日本語には区切り文字が無いため、追加の字句解析機能が必要 8
  • 9.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. MySQL 5.7でサポートされた日本語の字句解析方法 • N-gram: 一定の文字数で切りだして字句解析する手法 – デフォルトではbi-gram(2文字単位) • MeCab:オープンソースの形態素解析エンジン – 日本語の辞書をベースに字句解析する 9
  • 10.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. MySQL 5.7での強化点 • N-gramによる日本語、中国語、韓国語サポート – N文字区切りでトークンを検出 10 mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE ORDER BY doc_id, position LIMIT 10; +--------+--------------+-------------+-----------+--------+----------+ | WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION | +--------+--------------+-------------+-----------+--------+----------+ | ロー | 1 | 15 | 2 | 1 | 0 | | ール | 1 | 16 | 3 | 1 | 3 | | ルと | 1 | 1 | 1 | 1 | 6 | | とグ | 1 | 1 | 1 | 1 | 9 | | グル | 1 | 7 | 2 | 1 | 12 | | ルー | 1 | 16 | 3 | 1 | 15 | | ープ | 1 | 7 | 2 | 1 | 18 | | プベ | 1 | 1 | 1 | 1 | 21 | | 環境 | 1 | 1 | 1 | 1 | 21 | | ベー | 1 | 7 | 4 | 1 | 24 | +--------+--------------+-------------+-----------+--------+----------+ 10 rows in set (0.01 sec)c
  • 11.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. MySQL 5.7での強化点 • MeCabによる日本語サポート – MeCab(オープンソースの日本語辞書)を使ってトークンを検出 11 mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE ORDER BY doc_id, position LIMIT 10; +--------------------+--------------+-------------+-----------+--------+----------+ | WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION | +--------------------+--------------+-------------+-----------+--------+----------+ | ロール | 1 | 1 | 1 | 1 | 0 | | グループ | 1 | 7 | 2 | 1 | 12 | | 環境 | 1 | 1 | 1 | 1 | 21 | | ベース | 1 | 7 | 2 | 1 | 24 | | アクセス | 1 | 1 | 1 | 1 | 36 | | コントロール | 1 | 1 | 1 | 1 | 48 | | により | 1 | 1 | 1 | 1 | 66 | | mysql | 1 | 16 | 12 | 1 | 78 | | dba | 1 | 16 | 4 | 1 | 83 | | きめ細か | 1 | 1 | 1 | 1 | 91 | +--------------------+--------------+-------------+-----------+--------+----------+ 10 rows in set (0.00 sec)
  • 12.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. その他 • InnoDB日本語全文検索機能の使用方法は、1回目の資料参照 – 事前準備 – 全文検索インデックス作成方法 – 転置インデックス確認方法 • MySQL 5.7では、日本語全文検索がお手軽に使用できる 12
  • 13.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. その他 • 全文検索関数の使い方や関連性ランキングについては、 2回目の資料参照 – 全文検索関数の構文 – AND、OR、NOT検索 – 重みづけの変更方法 • MySQL 5.7の日本語全文検索は、一致するドキュメントを探すだけでなく、 検索ワードと関連の強いドキュメントを探す場合にも役立つ 13
  • 14.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 復習終わり 14
  • 15.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワードの設定 15
  • 16.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワードとは? • 全文検索インデックスの対象から外す単語 • 任意でストップワードを追加できる • 検索対象に含める必要のない単語をストップワードに指定することで、 インデックスサイズの縮小によるパフォーマンス向上が期待できる – 検索ワードとして指定しない単語 – 大半の文章に含まれていて、絞り込みの役に立たない単語 16
  • 17.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワードの設定方法 1.ストップワードを格納するためのテーブルを作成する 2.必要なシステム変数を設定する 3.ストップワードを”1.”で作成したテーブルに格納する ※追加したストップワードを反映させるためには、 全文検索インデックスの再作成が必要 17
  • 18.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 設定例:ストップワード用のテーブル作成 • varchar型のvalue列のみを持つテーブルを作成する • テーブル名は任意でOK 18 CREATE TABLE mecab.stopwords(value varchar(255) PRIMARY KEY);
  • 19.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 設定例: システム変数の設定 • my.cnfに以下を設定して再起動する – innodb_ft_enable_stopword (デフォルトでON) – innodb_ft_server_stopword_table (SETコマンドで動的に変更も可能) • innodb_ft_server_stopword_tableは、“スキーマ名/テーブル名”の 形式で指定する 19 character_set_server=utf8mb4 loose-mecab-rc-file=/usr/local/mysql/lib/mecab/etc/mecabrc innodb_ft_min_token_size=2 innodb_ft_enable_stopword=ON innodb_ft_server_stopword_table=mecab/stopwords
  • 20.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 設定例:ストップワードの追加 • innodb_ft_server_stopword_tableで指定したテーブルに追加したい ストップワードをINSERTする • 追加したストップワードを反映させるためには、全文検索インデックスの 再作成が必要 20 INSERT INTO mecab.stopwords VALUES('など'),('および'),('こと'),('でき '),('ます'),('mysql');
  • 21.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 補足 • 特定のテーブルに独自のストップワードを設定したい場合には、 innodb_ft_user_stopword_tableを利用する • innodb_ft_user_stopword_tableはセッション単位で設定変更出来るため、 innodb_ft_user_stopword_tableの設定を変えてから全文検索インデック スを作成する • innodb_ft_user_stopword_tableを設定した場合、 innodb_ft_server_stopword_tableは無視される 21
  • 22.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワードの指定例 22
  • 23.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. サンプルテーブル • サンプルテーブルのテーブル定義 – description列にMeCabパーサーを使用して全文検索インデックスを作成 • サンプルテーブルに格納した文章 – MySQL Enterprise Monitorのページ(※)に記載されている説明文をtitle列、 description列に格納(2016年9月20日時点のもの) ※https://www-jp.mysql.com/products/enterprise/monitor.html 23 mysql> show create table articles¥G *************************** 1. row *************************** Table: articles Create Table: CREATE TABLE `articles` ( `FTS_DOC_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(100) DEFAULT NULL, `description` text, PRIMARY KEY (`FTS_DOC_ID`), FULLTEXT KEY `mecab_idx` (`description`) /*!50100 WITH PARSER `mecab` */ ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 1 row in set (0.00 sec)
  • 24.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. サンプルテーブルに格納した文章 24 ※格納した文章の一覧を、資料後半のAppendix部分に掲載しています
  • 25.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワード設定前 • 転置インデックスは583件作成されている 25 mysql> SET GLOBAL innodb_ft_aux_table="mecab/articles"; Query OK, 0 rows affected (0.00 sec) mysql> SELECT count(*) FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +----------+ | count(*) | +----------+ | 583 | +----------+ 1 row in set (0.00 sec)
  • 26.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワード設定前 • 「ます」、「でき」、「する」など、検索で指定しないトークンや、ほとんどの 文章に含まれている単語(「mysql」)にも転置インデックスが作成されている 26 mysql> SELECT word,count(*) AS c FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE GROUP BY word ORDER BY c DESC LIMIT 10; +-----------------------+----+ | word | c | +-----------------------+----+ | ます | 33 | | mysql | 21 | | パフォーマンス | 13 | | でき | 12 | | 使用 | 11 | | する | 11 | | 監視 | 9 | | サーバー | 9 | | enterprise | 8 | | セキュリティ | 7 | +-----------------------+----+ 10 rows in set (0.00 sec)
  • 27.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワードの設定 • ストップワードを設定するためのテーブルを作成し、 ストップワードを格納する 27 mysql> CREATE TABLE mecab.stopwords(value varchar(255) PRIMARY KEY); Query OK, 0 rows affected (0.03 sec) mysql> INSERT INTO mecab.stopwords VALUES('ます'),('でき'),('する'),('mysql'); Query OK, 4 rows affected (0.01 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM mecab.stopwords; +--------+ | value | +--------+ | mysql | | する | | でき | | ます | +--------+ 4 rows in set (0.00 sec)
  • 28.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワードの設定 • my.cnfに以下を設定して再起動 – innodb_ft_enable_stopword=ON – innodb_ft_server_stopword_table=mecab/stopwords 28
  • 29.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワードの設定 • 全文検索インデックスの再作成 29 mysql> ALTER TABLE mecab.articles DROP KEY mecab_idx; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE mecab.articles ADD FULLTEXT KEY mecab_idx(description) WITH PARSER mecab; Query OK, 0 rows affected (0.22 sec) Records: 0 Duplicates: 0 Warnings: 0
  • 30.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワード設定後 • 転置インデックスが減っている(583件⇒506件) 30 mysql> SET GLOBAL innodb_ft_aux_table="mecab/articles"; Query OK, 0 rows affected (0.00 sec) mysql> SELECT count(*) FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +----------+ | count(*) | +----------+ | 506 | +----------+ 1 row in set (0.00 sec)
  • 31.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. ストップワード設定後 • ストップワードで指定した「ます」、「でき」、「する」、「mysql」には 転置インデックスが作成されていない 31 mysql> SELECT word,count(*) AS c FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE GROUP BY word ORDER BY c DESC LIMIT 10; +-----------------------+----+ | word | c | +-----------------------+----+ | パフォーマンス | 13 | | 使用 | 11 | | サーバー | 9 | | 監視 | 9 | | enterprise | 8 | | セキュリティ | 7 | | など | 6 | | 構成 | 6 | | 状況 | 6 | | および | 5 | +-----------------------+----+ 10 rows in set (0.00 sec)
  • 32.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. Appendix 32
  • 33.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 33 サンプルテーブルに格納した文章 mysql> SELECT * FROM mecab.articles¥G *************************** 1. row *************************** FTS_DOC_ID: 1 title: レプリケーション・ダッシュボード description: MySQL Enterprise Monitorは、自動的にレプリケーション・トポロジを検出し、パフォーマンス、可用性、マ スター/スレーブの状態を表示します。MySQL 5.7にも対応済みで、レプリケーション・ダッシュボードからレプリケーションの各種指 標を確認できます。また、トポロジ・ビューにより、レプリケーション・グループやレプリケーション構成、それぞれのノードの状態など を素早く確認できます。単純なレプリケーション構成だけでなく、マルチソース・レプリケーションや、循環型、階層型といった複雑な 構成にも対応しています。 *************************** 2. row *************************** FTS_DOC_ID: 2 title: アクセス制御リスト (ACLs) description: ロールとグループベースのアクセスコントロールにより、MySQL DBA にきめ細かなセキュリティポリシーを定義 するための簡単な方法を提供します。アクセス制御リストは、MySQL Enterprise Monitor をマルチテナント環境やクラウド環 境で使用している場合のアカウント管理を簡素化します。 *************************** 3. row *************************** FTS_DOC_ID: 3 title: MySQL Enterprise Firewall 監視 description: グラフとレポートから MySQL Enterprise Firewall のアクティビティを容易に監視でき、MySQL Server を特定のデータベース攻撃から守ることに役立ちます。ベスト・プラクティス・アドバイザーは、潜在的なセキュリティの脅威 を検知した時に警告を通知し、MySQL Enterprise Firewall や関連するセキュリティ設定の変更を推奨します。
  • 34.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 34 サンプルテーブルに格納した文章 *************************** 4. row *************************** FTS_DOC_ID: 4 title: MySQL Enterprise Audit 監視 description: 全てのMySQLサーバーにわたって、MySQL Enterprise Audit の状況を監視します。ベスト・プラクティス・ アドバイザーは、HIPAA、SOX 法、および PCI データセキュリティ基準などの一般的なセキュリティポリシーにおいて、企業の法 令遵守を支援します。 *************************** 5. row *************************** FTS_DOC_ID: 5 title: MySQL パフォーマンスのリアルタイム監視およびアラート生成 description: MySQL Enterprise Monitor は MySQL クエリーとパフォーマンス関連のサーバー指標を継続的に監視 します。基準となるパフォーマンスのトレンドから大きな逸脱があった場合にアラートを受信します。また、ベストプラクティス・アドバイ ザは、パフォーマンスを向上させるための構成やパラメータ設定の変更を提案します。 *************************** 6. row *************************** FTS_DOC_ID: 6 title: MySQL の可用性に関するリアルタイム監視 description: 開発者および DBA は、データベース可用性の監視と測定によって、品質保証契約 (SLA) のコミットメントを満 たしているかを把握できます。 *************************** 7. row *************************** FTS_DOC_ID: 7 title: クラウドにおける MySQL のリモート監視 description: クラウドおよび VM に対応した設計になっており、リモート・エージェントを必要とせずに、MySQL サーバーをリ モートで監視できます。
  • 35.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 35 サンプルテーブルに格納した文章 *************************** 8. row *************************** FTS_DOC_ID: 8 title: すべての MySQL サーバーを視覚的に管理 description: Visual Dashboard は Web ベースのインタフェースで、データベースのパフォーマンス、可用性、重大イベ ントなどを全体的に詳しく確認できます。1台のサーバー、カスタム・グループ、またはすべてのサーバーを視覚的に調べます。リア ルタイム情報や履歴情報の豊富なグラフを使用して、サーバー統計の詳細情報にまでドリルダウンできます。 *************************** 9. row *************************** FTS_DOC_ID: 9 title: 視覚的にクエリーを解析 description: クエリー・パフォーマンスのリアルタイム監視、実行時統計の確認、遅延の原因になっている SQL コードのフィ ルタリングと特定が可能です。 MySQL Server 5.6 のパフォーマンス・スキーマを使用すれば、ソフトウェアや構成を追加する ことなく、データが MySQL サーバーから直接収集されます。 *************************** 10. row *************************** FTS_DOC_ID: 10 title: 負荷の大きいクエリーの発見と修正 description: 開発者および DBA は、相関グラフを使用して実行時パラメータ(サーバー負荷、スレッド統計、RAM 使用状況 など)を、その時点で実行中であったクエリーと比較できます。グラフ上のタイムスライスを強調表示するだけで、もっとも負荷のかか るクエリーを発見し、より大きなパフォーマンス問題の潜在的な原因を特定します。
  • 36.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 36 サンプルテーブルに格納した文章 *************************** 11. row *************************** FTS_DOC_ID: 11 title: InnoDB の監視 description: MySQL のパフォーマンスに影響を及ぼす重要な InnoDB 指標を監視します。非効率な索引の使用、ロックの 問題、InnoDB バッファ・プール の使用に関するアラートを受信して、現在のパフォーマンスや解析されたトレンドに基づいた InnoDB 構成を改善する方法についてのヒントを得ることができます。 *************************** 12. row *************************** FTS_DOC_ID: 12 title: MySQL Cluster の監視 description: パフォーマンスと可用性に影響を及ぼす重要な MySQL Cluster 指標を監視します。グラフを通じて履歴情 報を確認し、データ・ノードのキャッシュ・ヒット率が低い、データ・メモリが枯渇しそうである、ノード障害が発生しそうであるといった潜 在的な問題に関するアラートを受信できます。 *************************** 13. row *************************** FTS_DOC_ID: 13 title: バックアップの監視 description: MySQL ベストプラクティス・アドバイザは、オンライン・ホット・バックアップが想定どおり実行することを支援し、" 前回の全体バックアップは古すぎるか?"、"増分バックアップは実行中か?"、"前回のバックアップ・ジョブは成功したか?"、" バックアップのロックの時間が長すぎるか?"などの疑問に回答します。
  • 37.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 37 サンプルテーブルに格納した文章 *************************** 14. row *************************** FTS_DOC_ID: 14 title: ディスクの監視 description: トレンドの解析と計画によって、今後必要になる容量を管理者が予測できるようにします。MySQL Enterprise Monitor は、"ディスク領域が12か月後に一杯になる場合に通知する"といったユーザーが定義したしきい値に基づいて、運用ス タッフに予防的なアラートを送信します。 *************************** 15. row *************************** FTS_DOC_ID: 15 title: オペレーティング・システムの監視 description: ロードアベレージ、CPU 使用状況、RAM 使用状況、スワップ使用状況、ファイルシステム使用状況、ディスク I/O など、オペレーティング・システムレベルのパフォーマンス指標を視覚的にリアルタイムで監視します。 *************************** 16. row *************************** FTS_DOC_ID: 16 title: セキュリティ上のぜい弱性の特定 description: MySQL Enterprise Monitor は MySQL サーバーを保護し、開発者と DBA がセキュリティ・ホールを発 見し、それに対応するための支援をします。アドバイザによって、 MySQL のセキュリティに関するベストプラクティスを実施するた めに設計された一連のルールが提供され、潜在的なぜい弱性がシステムに影響を及ぼす前にアラートを送信します。 *************************** 17. row *************************** FTS_DOC_ID: 17 title: 開発中およびテスト中のチューニングを迅速化 description: 開発中およびテスト中のパフォーマンスに関する問題を発見するまでにかかる時間を大幅に短縮することで、ア プリケーションをより迅速に本番運用できます。ユーザーよりも先にパフォーマンスの問題を特定して修正できます。 17 rows in set (0.00 sec)
  • 38.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. イベント告知 38
  • 39.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 今後のセミナー予定 • MySQL 最前線 ~ 2016年秋 最新アップデート – Oracle Open World 2016で発表された最新情報をフィードバックする セミナーです • 主なトピック – Oracle MySQL Cloud Service – MySQL8.0 DMR(開発途上版) – MySQL Cluster7.5 RC(リリース候補版) – MySQL InnoDB Cluster(MySQL Group Replication + MySQL Router + MySQL Shell) 39
  • 40.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 今後のセミナー予定 • 日時 – 東京:2016年10月3日(月) 14:00~17:30 – 大阪:2016年10月11日(火) 14:00~17:30 – 名古屋:2016年10月12日(水) 14:00~17:30 – 福岡:2016年10月13日(木) 14:00~17:30 • 申込ページ – 「mysql イベント」で検索 40
  • 41.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. 41