2

これについてオンラインで情報を見つけることはできません。パーティション表を変更する

既にパーティション化されている表を変更する最適な方法は何ですか?

私は普通の

UPDATE `table` MODIFY COLUMN `column_name` TINYINT(1) DEFAULT 1 NOT NULL; 

を使用し、数分間

をテーブルをロックするか、私はパーティションでそのコマンドパーティションを実行する必要がありますでしょうか?

UPDATE `table` PARTITION (p0) MODIFY COLUMN `column_name` TINYINT(1) DEFAULT 1 NOT NULL; 

推奨事項を教えてください。 すべてのパーティションが正確に等しくない場合はどうなりますか?それも可能ですか?

これはcreate文です:

CREATE TABLE `redirects` (
    `emailhash` varchar(100) NOT NULL, 
    `f_email_log` varchar(50) NOT NULL, 
    `linknum` int(11) NOT NULL DEFAULT '1', 
    `redirect` varchar(500) NOT NULL, 
    `clicked` int(11) NOT NULL DEFAULT '0', 
    `clicktime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`emailhash`), 
    KEY `f_email_log` (`f_email_log`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
/*!50100 PARTITION BY KEY (emailhash) 
PARTITIONS 16 */ 

テーブルには約40万レコードを持っています。

INTのようないくつかのフィールドのサイズをTINYINTに縮小したいのですが、これらの値は大部分が1から30または0/1で、varcharの長さは、削減。

答えて

1

パーティションテーブルを変更する場合は、各パーティションを一度に1つずつ変更する必要があります。一方、テーブル全体をロックする必要があります。そうしないと、読み書きは半分のAlterにつまずくでしょう。

パーティションの数、パーティション化の根拠、および変更が必要な列を指定してください。SHOW CREATE TABLE回避策を提案することができます。

もっと

400Mの行は、そのスキーマのために12ギガバイト程度でしょうか? (そのくらいのRAMのために11Gまで上げることができる)
4GBのBUFFER_POOL
キーの
MD5 - 挿入と選択の> 67%がRAM(キャッシュ)で所望のブロックを見つけることができませんので、ヒットしなければなりませんディスク。これにより、パフォーマンスが低下します。テーブルが大きくなるにつれて悪化するだけです。パーティション化されているかどうかは関係ありません。 (いいえ、違いは説明できません)

詳細については、hereを参照してください。ただし、ユースケースには適していません。

データ型(4バイトINT - > 1バイトTINYINT UNSIGNEDなど)を縮小すると、いくつかの点で役立ちます。 UNHEX(md5)は、16バイトでハッシュを入れさせるでしょう:BINARY(16)、これによりあなたは今持っているものより18バイトのようなものを保存します。 VARCHARの最大値を小さくすると、ほとんど効果がありません。同義語はCHARACTER SETです。

クエリは、 "速い" ALTERを行う方法の元の質問に戻る

where emailhash=UNHEX('abcdef1234567890')

ALTERが必要になります。 が既にに設定されている場合を除き、レプリケーションがセットアップされていないと、あなたはほとんど運が悪いです。パーティションは常に同じスキーマを持つ必要があるため、1つずつ変更することはできません。

... pt-online-schema-changegh-ostをチェックして、パーティション化されたテーブルで動作するかどうかを確認してください。

+0

元の質問にコードを追加しました。何か案が? –

+0

'PARTITION BY KEY(プライマリキー) 'はパフォーマンスには役に立たない。パーティショニングによってどこから得たいと思っていますか?また、16パーティション表には約100MBのオーバーヘッドがあります。 –

+0

"ハッシュ"が非常にランダムであると仮定すると、あなたは常にテーブルの周りを飛び回っています。テーブル全体をキャッシュするのに十分なRAMがないと思いますか?したがって、パフォーマンスが低下します。 –

関連する問題