mysql 西安_MySQL分区维护
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
注釋:實際上,本節討論的命令還沒有在MySQL 5.1中實現, 在這里提出的目的,是為了在5.1版投產前的開發周期期間,引出來自用戶測試該軟件的反饋意見。(換句話說,就是“請不要反饋這樣的缺陷,說這些命令不起作用”)。隨著MySQL5.1版開發的繼續,這些信息很有可能發生變化。隨著分區功能的實現和提高,我們將更新本節的內容。
MySQL 5.1中可以執行許多分區維護的任務。對于分區表,MySQL不支持命令CHECK TABLE,OPTIMIZE TABLE,ANALYZE TABLE,或REPAIR TABLE。作為替代,可以使用ALTER TABLE 的許多擴展來在一個或多個分區上直接地執行這些操作,如下面列出的那樣:
· 重建分區: 這和先刪除保存在分區中的所有記錄,然后重新插入它們,具有同樣的效果。它可用于整理分區碎片。
示例:
ALTER TABLE t1 REBUILD PARTITION (p0, p1);
· 優化分區:如果從分區中刪除了大量的行,或者對一個帶有可變長度的行(也就是說,有VARCHAR,BLOB,或TEXT類型的列)作了許多修改,可以使用“ALTER TABLE ... OPTIMIZE PARTITION”來收回沒有使用的空間,并整理分區數據文件的碎片。
示例:
ALTER TABLE t1 OPTIMIZE PARTITION (p0, p1);
在一個給定的分區表上使用“OPTIMIZE PARTITION”等同于在那個分區上運行CHECK PARTITION,ANALYZE PARTITION,和REPAIR PARTITION。
· 分析分區:讀取并保存分區的鍵分布。
示例:
ALTER TABLE t1 ANALYZE PARTITION (p3);
· 修補分區: 修補被破壞的分區。
示例:
ALTER TABLE t1 REPAIR PARTITION (p0,p1);
· 檢查分區: 可以使用幾乎與對非分區表使用CHECK TABLE 相同的方式檢查分區。
示例:
ALTER TABLE trb3 CHECK PARTITION (p1);
這個命令可以告訴你表t1的分區p1中的數據或索引是否已經被破壞。如果發生了這種情況,使用“ALTER TABLE ... REPAIR PARTITION”來修補該分區。
還可以使用mysqlcheck或myisamchk 應用程序,在對表進行分區時所產生的、單獨的MYI文件上進行操作,來完成這些任務。
獲取關于分區的信息
本節討論獲取關于現有分區的信息。這個功能仍然處于計劃階段,所以現階段在這里描述的,實際上是我們想要在MySQL 5.1中實現的一個概觀。
如在本章中別處討論的一樣,在SHOW CREATE TABLE的輸出中包含了用于創建分區表的PARTITION BY子句。例如:
mysql> SHOW CREATE TABLE trb3\G*************************** 1. row *************************** Table: trb3Create Table: CREATE TABLE `trb3` ( `id` int(11) default NULL, `name` varchar(50) default NULL, `purchased` date default NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY RANGE (YEAR(purchased)) ( PARTITION p0 VALUES LESS THAN (1990) ENGINE = MyISAM, PARTITION p1 VALUES LESS THAN (1995) ENGINE = MyISAM, PARTITION p2 VALUES LESS THAN (2000) ENGINE = MyISAM, PARTITION p3 VALUES LESS THAN (2005) ENGINE = MyISAM)1 row in set (0.00 sec)
注釋:當前,對于按HASH或KEY分區的表,PARTITIONS子句并不顯示。 (Bug #14327)
SHOW TABLE STATUS用于分區表,它的輸出與用于非分區表的輸出相同,除了引擎(Engine)列總是包含'PARTITION'值。(關于這個命令的更多信息,參見13.5.4.18節,“SHOW TABLE STATUS語法”)。要獲取單個分區的狀態信息,我們計劃實現一個SHOW PARTITION STATUS命令(請參見下面)。
計劃用于分區表的、兩個附加的SHOW命令是:
· SHOW PARTITIONS
這個命令預期其功能類似于SHOW TABLES和SHOW DATABASES,除了該命令將列出的是分區而不是表或數據庫。這個命令的輸出可能包含單個稱為Partitions_in_tbl_name 的列,其中tbl_name 是分區表的名字。對于SHOW TABLES命令而言,如果一旦選擇了一個數據庫,隨后該數據庫將作為SHOW TABLES命令的默認數據庫。但是由于SHOW PARTITIONS命令不可能用這樣的方式來“選擇”一個表,它很可能需要使用FROM子句,以便MySQL知道要顯示的是哪個表的分區信息。
· SHOW PARTITION STATUS
這個命令將提供關于一個或多個分區的詳細狀態信息。它的輸出很可能包含有與SHOW TABLE STATUS 的輸出相同或類似的列,此外,還包括顯示用于分區的數據和索引路徑的附加列。這個命令可能支持LIKE和FROM子句,這樣使得通過名字獲得關于一個給定分區的信息,或者獲得關于屬于指定表或數據庫的分區的信息,成為可能。
擴展INFORMATION_SCHEMA 數據庫的計劃也在進行中,以便提供關于分區表和分區的信息。這個計劃當前還處一個在非常早的階段;隨著補充的信息變得可用,以及任何新的、與分區有關的INFORMATION_SCHEMA擴展得以實現,我們將更新手冊相關部分的內容。
這是MySQL參考手冊的翻譯版本,關于MySQL參考手冊,請訪問dev.mysql.com。原始參考手冊為英文版,與英文版參考手冊相比,本翻譯版可能不是最新的。
在改變分區設置方面,按照HASH分區或KEY分區的表彼此非常相似,但是它們又與按照RANGE或LIST分區的表在很多方面有差別。所以,本節只討論按照HASH或KEY分區表的修改。
不能使用與從按照RANGE或LIST分區的表中刪除分區相同的方式,來從HASH或KEY分區的表中刪除分區。但是,可以使用“ALTER TABLE ... COALESCE PARTITION”命令來合并HASH或KEY分區。例如,假定有一個包含顧客信息數據的表,它被分成了12個分區。該顧客表的定義如下:
CREATE TABLE clients (http://www.hdd-120.cn/ id INT, fname VARCHAR(30), lname VARCHAR(30), signed DATE)PARTITION BY HASH( MONTH(signed) )PARTITIONS 12;
要減少分區的數量從12到6,執行下面的ALTER TABLE命令:
mysql> ALTER TABLE clients COALESCE PARTITION 6;Query OK, 0 rows affected (0.02 sec)
對于按照HASH,KEY,LINEAR HASH,或LINEAR KEY分區的表, COALESCE能起到同樣的作用。下面是一個類似于前面例子的另外一個例子,它們的區別只是在于表是按照LINEAR KEY 進行分區:
mysql> CREATE TABLE clients_lk ( -> id INT, -> fname VARCHAR(30), -> lname VARCHAR(30), -> signed DATE -> ) -> PARTITION BY LINEAR KEY(signed) -> PARTITIONS 12;Query OK, 0 rows affected (0.03 sec) mysql> ALTER TABLE clients_lk COALESCE PARTITION 6;Query OK, 0 rows affected (0.06 sec)Records: 0 Duplicates: 0 Warnings: 0
COALESCE不能用來增加分區的數量,如果你嘗試這么做,結果會出現類似于下面的錯誤:
mysql> ALTER TABLE clients COALESCE PARTITION 18;錯誤1478 (HY000): 不能移動所有分區,使用DROP TABLE代替
要增加顧客表的分區數量從12到18,使用“ALTER TABLE ... ADD PARTITION”,具體如下:
ALTER TABLE clients ADD PARTITION PARTITIONS 18;
注釋:“ALTER TABLE ... REORGANIZE PARTITION”不能用于按照HASH或HASH分區的表。
總結
以上是生活随笔為你收集整理的mysql 西安_MySQL分区维护的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql autocommit_【整理
- 下一篇: atlas mysql 数据库同步_at