gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

MySQLのパーティションでセッションテーブル管理:失敗編

とりあえずアバウトにmemo。


やりたいこと。

drop table session_test;
create table session_test (
  session_id varbinary(256) not null,
  use_id     varbinary(64) not null,
  data       blob,
  insert_date datetime,
  update_date datetime,
  PRIMARY KEY (session_id)
) ENGINE=InnoDB
  PARTITION BY RANGE ( hour(update_date) ) (
    PARTITION p00 VALUES less than(0),
    PARTITION p01 VALUES less than(1),
    PARTITION p02 VALUES less than(2),
    PARTITION p03 VALUES less than(3),
    .
    .
    .
    PARTITION p23 VALUES less than(23),
    PARTITION pmax VALUES LESS THAN MAXVALUE  
  );

んで、バッチで

DROP PARTITION p(二時間前);

ってやりたいげ。


で…現実。
まずそもそもとして
「A PRIMARY KEY must include all columns in the table's partitioning function」
って怒られる orz
だって「レンジの値はど〜したってPKぢゃねぇもん;;」

update_dateが15:59:00から16:00:00にupdateされた時って、ちゃんと動くのかしらん?
いやまぁ「PKだからうごかねぇよ!」って前提条件は置いておくとして。
# 一説によると*1これはちゃんと対応してるぽ…それだけになおのこと「PK縛り」が残念にすぎる orz


ちなみに、本気でやると、パーティションの設定部分が多分

    PARTITION p00 VALUES IN (0,3,6, 9,12,15,18,21),
    PARTITION p01 VALUES IN (1,4,7,10,13,16,19,22),
    PARTITION p02 VALUES IN (2,5,8,11,14,17,20,23),
    PARTITION pmax VALUES LESS THAN MAXVALUE  

ってなる。「今必要なパーティション」「念のために寝かせておくパーティション」「dropするパーティション」があれば十分なはずだしね。


さて…こんな風に使える日はくるのか!?