2017-11-08 5 views
0

Mac OS 10.11.2でMac Mini上でMySQL 5.7.10を実行しています.16GBのメモリと1 TBのSSDドライブに160GBの空き容量があります。CREATE INDEX中にMySQLサーバーへの接続が失われました

約12億レコードのテーブルがあり、サイズは約400GBです。それは、1年の間データを収集することを目的としています。しかし今、私は新しい複合インデックスが必要です。 mysqlコマンドラインユーティリティを使用して

CREATE INDEX composite_IDX USING BTREE ON db.stats (foo,bar(2),baz,quux,fum,shme); 

しかし、私は日中、夜間に、またはにより忍耐を聞きながら、ローカルscreenセッションでは、ローカル、リモートで実行するかどうかガンズ・アンド・ローゼズ、は、遅かれ早かれ、それは常に失敗します。

ERROR 2013 (HY000): Lost connection to MySQL server during query 

は、このメッセージは私をたくさん教えてくれありません。なぜこのインデックスを作成できないのですか?私に何ができる?

私は/etc/mysql/my.cnfに不合理なタイムアウトを追加しようとしました:

[mysqld] 
default_password_lifetime=0 
max_allowed_packet = 1G 
net_read_timeout = 240 
net_write_timeout = 1800 

innodb_buffer_pool_size = 8G 
innodb_flush_log_at_trx_commit = 2 

# Add absurd timeout 
wait_timeout = 172800 
interactive_timeout = 172800 

[mysqldump] 
max_allowed_packet = 1G 

しかし、それは何も変更しませんでした。私は基本的にここでストローを掴んでいます。

+0

ダンノーは重複としてカウントされますが[この質問](https:// stackoverflow。com/questions/10563619/error-code-2013-lost-connection-to-mysql-server-between-query)が役に立ちます。 – Alfabravo

+1

CREATE INDEXはdiskspaceを使います。diskspaceを使い果たしてMySQLが接続を終了したと思います。 –

+0

あなたが持っている行の数と索引に含める列の数が少なすぎるとしても、エラーログに何かが表示されるはずです。 – fancyPants

答えて

0

このインデックスのプレフィックスはありますか?その場合、createステートメントは、一意でないインデックスと接頭辞が最大列データ型サイズを超えているとエラーになります。

テーブルの種類でサポートされているインデックスを作成していますか?はいですか?たとえば、FULLTEXTインデックスは、InnoDBテーブルとMyISAMテーブルでのみサポートされています。

は、ここでのドキュメントへのリンクです:https://dev.mysql.com/doc/refman/5.7/en/create-index.html

しかし、それはテーブルのあまりがメモリ/複合インデックスを作成するには、サーバーの一時ストレージにロードに読み込まなければならないことかもしれません。 160Gbの空き領域しかありませんが、テーブルのサイズは400Gbで、6列のインデックスを作成しています。 12億レコードでは、72億個のフィールドがあります。私はそれが一時的なストレージの問題かRAMの問題かどうか疑問に思っています。

+0

'ALTER ... ALGORITHM = INPLACE'はテーブルのコピーを避けます。だからあなたの答えは関係ないかもしれません。 (OPは確かに十分な詳細を述べていません) –

0

それは死んでも同様です。 bar(2)などの接頭辞は、索引内の列の後に列を使用することを防止します。したがって、インデックスはあなたが思ったほど有用ではありません。それで、それが助けられるはずだったクエリを見てみましょう。SHOW CREATE TABLEを見てみましょう。次に、より良い指標を見つけることに集中できます。 (新しい質問を開始します。)

一方...

  • ディスクの空き領域が最大の表のサイズより縮小させるためには賢明ではありません。
  • innodb_file_per_tableと一緒にお越しいただければ幸いですか?
  • 5.7には、このような小さなスペアスペースに必要なALTER TABLE .. ADD INDEX .. ALGORITHM=INPLACEがあります。
  • タイムアウトは、mysqldを再起動するまで有効になりません。
+0

インデックスの有用性の評価は、この質問の範囲外です。また、それは間違っています。高度なケースでは複合インデックス内のプレフィックスインデックスが必要です。 – Redsandro

+0

@Redsandro - 直近の質問(タイムアウトについて)だけでなく、究極の質問(質問のスピードアップ)を解決しようとしています。問題のインデックスから恩恵を受けるクエリは何ですか? –

関連する問題