web-dev-qa-db-ja.com

MySQLがWord_sid_typeindexの代わりにインデックスを選択しなかったため、Y.ZのチャンクXをスキップします

私の環境:

# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.8 (Santiago)
# uname -a
Linux A.B.C 2.6.32-642.4.2.el6.x86_64 #1 SMP Mon Aug 15 02:06:41 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux
# rpm -q mysql-server percona-toolkit
mysql-server-5.1.73-7.el6.x86_64
percona-toolkit-2.2.19-1.noarch
# 

私は実行していますpt-table-checksumそして私は次のエラーを受け取っています:

MySQLがWord_sid_typeindexの代わりにインデックスを選択しなかったため、Y.ZのチャンクXをスキップします。

mysql> DESCRIBE search_index;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| Word  | varchar(50)      | NO   | MUL |         |       |
| sid   | int(10) unsigned | NO   | MUL | 0       |       |
| type  | varchar(16)      | YES  |     | NULL    |       |
| score | float            | YES  |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> SHOW TABLE STATUS WHERE Name='search_index'\G;
*************************** 1. row ***************************
           Name: search_index
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 3155432
 Avg_row_length: 51
    Data_length: 163250176
Max_data_length: 0
   Index_length: 415514624
      Data_free: 839909376
 Auto_increment: NULL
    Create_time: 2016-09-01 21:14:58
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.13 sec)

ERROR: 
No query specified

mysql> 

アドバイスをお願いします。

3
alexus

これは私が提案するものです:

  • SHOW INDEXES FROM Y.Z\Gを実行します
  • --chunk-indexオプションでカーディナリティが最も高いインデックスを使用する
  • 別のハッシュ関数を使用する--function=md5
  • 小さい--chunk-sizeを使用します(例:200)

必要に応じて、影響を受けるテーブルでANALYZE TABLEを実行して、統計を再計算します。ビジー状態のサーバーでANALYZETABLEを実行した場合の影響を認識していることを確認してください。

1
jerichorivera

メッセージは予期されたものであり、気がかりなものです。

なぜ期待されるのですか?

このメッセージが邪魔になることはまったくありません。一意性が定義されていないため、 pt-table-checksum がチャンクをバイパスすることを期待します。確かに、InnoDBは、PRIMARYKEYまたはUNIQUEINDEXがない場合、 gen_clust_indexと呼ばれる行ベースのインデックス を作成します。したがって、テーブルから読み取られたチャンクには、挿入の順序以外に、その順序に韻や理由はありません。

なぜ邪魔するのですか?

質問にレプリケーションタグがあるので、これは気がかりになります。

マスターに多くの書き込みがある場合、スレーブはマスターとは異なる順序で行を書き込む場合があります。 search_indexテーブルにPRIMARY KEYまたはUNIQUE INDEXがある場合、チェックサム評価が安定します。残念ながら、マスターとスレーブの両方にInnoDBテーブルがある唯一の一意性の形式として、内部で生成されたインデックス(gen_clust_index)を持つテーブルの場合は言えません。

解決

  1. マスターでsearch indexの主キーを定義します。
  2. マスターからmysqldumpsearch_indexを実行し、スレーブにロードします
1
RolandoMySQLDBA