1,不支持創(chuàng)建臨時表(temporary tables);
2,創(chuàng)建索引和鍵的限制:
(1),在列上創(chuàng)建索引長度超過3072bytes會成功,但是只能使用索引的前3072bytes。并且會顯示警告信息"specified key was too long,max key lenght is 3072 keys"
不支持的特征
1,在NDB創(chuàng)建create table時,一定要指定tablespace.
For NDB tables, beginning with MySQL Cluster NDB 6.2.5 and MySQL Cluster NDB 6.3.2, it is also possible to specify whether the column is stored on disk or in memory by using a STORAGE clause. STORAGE DISK causes the column to be stored on disk, and STORAGE MEMORY causes in-memory storage to be used. The CREATE TABLE statement used must still include a TABLESPACE clause:
mysql> CREATE TABLE t1 (
-> c1 INT STORAGE DISK,
-> c2 INT STORAGE MEMORY
-> ) ENGINE NDB;
ERROR 1005 (HY000): Can't create table 'c.t1' (errno: 140)
mysql> CREATE TABLE t1 (
-> c1 INT STORAGE DISK,
-> c2 INT STORAGE MEMORY
-> ) TABLESPACE ts_1 ENGINE NDB;
Query OK, 0 rows affected (1.06 sec)
//NDB參數(shù)解釋 ---from 《mysql性能調(diào)優(yōu)和架構(gòu)設(shè)計》
1) [NDBD DEFAULT]中的配置項:
NoOfReplicas:定義在Cluster 環(huán)境中相同數(shù)據(jù)的分?jǐn)?shù),通俗一點來說就是每一份數(shù)據(jù)存放NoOfReplicas 份。如果希望能夠冗余,那么至少設(shè)置為2(一般情況來說此參數(shù)值設(shè)置為2 就夠了),最大只能設(shè)置為4。另外,NoOfReplicas 值得大小,實際上也就是nodegroup 大小的定義。NoOfReplicas 參數(shù)沒有系統(tǒng)默認(rèn)值,所以必須設(shè)定,而且只能設(shè)置在[NDBD DEFAULT]中,因為此數(shù)值在整個Cluster 集群中一個node group 中所有的NDBD 節(jié)點都需要一樣。另外NoOfReplicas 的數(shù)目對整個Cluster 環(huán)境中NDB 節(jié)點數(shù)量有較大的影響,因為NDB 節(jié)點總數(shù)量是NoOfReplicas * 2 * node_group_num;DataDir:指定本地的pid 文件,trace 文件,日志文件以及錯誤日志子等存放的路徑,無系統(tǒng)默認(rèn)地址,所以必須設(shè)定;
DataMemory:設(shè)定用于存放數(shù)據(jù)和主鍵索引的內(nèi)存段的大小。這個大小限制了能存放的數(shù)據(jù)的大小,因為ndb 存儲引擎需屬于內(nèi)存數(shù)據(jù)庫引擎,需要將所有的數(shù)據(jù)(包括索引)都load 到內(nèi)存中。這個參數(shù)并不是一定需要設(shè)定的,但是默認(rèn)值非常小(80M),只也就是說如果使用默認(rèn)值,將只能存放很小的數(shù)據(jù)。參數(shù)設(shè)置需要帶上單位,如512M,2G 等。另外,DataMemory 里面還會存放UNDO 相關(guān)的信息,所以,事務(wù)的大小和事務(wù)并發(fā)量也決定了DataMemory 的使用量,建議盡量使用小事務(wù);
IndexMemory:設(shè)定用于存放索引(非主鍵)數(shù)據(jù)的內(nèi)存段大小。和DataMemory類似,這個參數(shù)值的大小同樣也會限制該節(jié)點能存放的數(shù)據(jù)的大小,因為索引的大小是隨著數(shù)據(jù)量增長而增長的。參數(shù)設(shè)置也如DataMemory 一樣需要單位。IndexMemory 默認(rèn)大小為18M;實際上,一個NDB 節(jié)點能存放的數(shù)據(jù)量是會受到DataMemory 和IndexMemory 兩個參數(shù)設(shè)置的約束,兩者任何一個達(dá)到限制數(shù)量后,都無法再增加能存儲的數(shù)據(jù)量。如果繼續(xù)存入數(shù)據(jù)系統(tǒng)會報錯“table is full”。
FileSystemPath:指定redo 日志,undo 日志,數(shù)據(jù)文件以及meta 數(shù)據(jù)等的存放位置,默認(rèn)位置為DataDir 的設(shè)置,并且在ndbd 初始化的時候,參數(shù)所設(shè)定的文件夾必須存在。在第一次啟動的時候,ndbd 進(jìn)程會在所設(shè)定的文件夾下建立一個子文件夾叫ndb_id_fs,這里的id 為節(jié)點的ID 值,如節(jié)點id 為3 則文件夾名稱為ndb_3_fs。當(dāng)然,這個參數(shù)也不一定非得設(shè)置在[NDBD DEFAULT]參數(shù)組里面讓所有節(jié)點的設(shè)置都一樣(不過建議這樣設(shè)置),還可以設(shè)置在[NDBD]參數(shù)組下為每一個節(jié)點單獨設(shè)置自己的FileSystemPath值;
BackupDataDir:設(shè)置備份目錄路徑,默認(rèn)為FileSystemPath/BACKUP。接下來的幾個參數(shù)也是非常重要的,主要都是與并行事務(wù)數(shù)和其他一些并行限制有關(guān)的參數(shù)設(shè)置。
MaxNoOfConcurrentTransactions:設(shè)置在一個節(jié)點上面的最大并行事務(wù)數(shù)目,默認(rèn)為4096,一般情況下來說是足夠了的。這個參數(shù)值所有節(jié)點必須設(shè)置一樣,所以一般都是設(shè)置在[NDBD DEFAULT]參數(shù)組下面;
MaxNoOfConcurrentOperations:設(shè)置同時能夠被更新(或者鎖定)的記錄數(shù)量。一般來說可以設(shè)置為在整個集群中相同時間內(nèi)可能被更新(或者鎖定)的總記錄數(shù),除以NDB節(jié)點數(shù),所得到的值。
MaxNoOfLocalOperations:此參數(shù)默認(rèn)是MaxNoOfConcurrentOperations * 1.1的大小,也就是說,每個節(jié)點一般可以處理超過平均值的10%的操作記錄數(shù)量。但是一般來說,MySQL 建議單獨設(shè)置此參數(shù)而不要使用默認(rèn)值,并且將此參數(shù)設(shè)置得更較大一些;
以下的三個參數(shù)主要是在一個事務(wù)中執(zhí)行一條query 的時候臨時用到存儲(或者內(nèi)存)的情況下所使用到的,所使用的存儲信息會在事務(wù)結(jié)束(commit 或者rollback)的時候釋放資源;
MaxNoOfConcurrentIndexOperations:這個參數(shù)和MaxNoOfConcurrentOperations參數(shù)比較類似,只不過所針對的是Index 的record 而已。其默認(rèn)值為8192,對伊一般的系統(tǒng)來說都已經(jīng)足夠了,只有在事務(wù)并發(fā)非常非常大的系統(tǒng)上才有需要增加這個參數(shù)的設(shè)置。當(dāng)然,此參數(shù)越大,系統(tǒng)運行時候為此而消耗的內(nèi)存也會越大;
MaxNoOfFiredTriggers:觸發(fā)唯一索引(hash index)操作的最大的操作數(shù),這個操作數(shù)是影響索引的操作條目數(shù),而不是操作的次數(shù)。系統(tǒng)默認(rèn)值為4000,一般系統(tǒng)來說夠用了。當(dāng)然,如果系統(tǒng)并發(fā)事務(wù)非常高,而且涉及到索引的操作也非常多,自然也就需要提高這個參數(shù)值的設(shè)置了;
TransactionBufferMemory:這個buffer 值得設(shè)置主要是指定用于跟蹤索引操作而使用的。主要是用來存儲索引操作中涉及到的索引key 值和column 的實際信息。這這個參數(shù)的值一般來說也很少需要調(diào)整,因為實際系統(tǒng)中需要的這部分buffer 量非常小,雖然默認(rèn)值只是1M,但是對于一般應(yīng)用也已經(jīng)足夠了;
下面要介紹到的參數(shù)主要是在系統(tǒng)處理中做table scan 或者range scan 的時候使用的一些buffer 的相關(guān)設(shè)置,設(shè)置的恰當(dāng)可以既節(jié)省內(nèi)存又達(dá)到足夠的性能要求。
MaxNoOfConcurrentScans:這個參數(shù)主要控制在Cluster 環(huán)境中并發(fā)的table scan和range scan 的總數(shù)量平均分配到每一個節(jié)點后的平均值。一般來說,每一個scan 都是通過并行的掃描所有的partition 來完成的,每一個partition 的掃描都會在該partition所在的節(jié)點上面使用一個scan record。所以,這個參數(shù)值得大小應(yīng)該是“scan record”數(shù)目* 節(jié)點數(shù)目。參數(shù)默認(rèn)大小為256,最大只能設(shè)置為500;
MaxNoOfLocalScans:和上面的這個參數(shù)相對應(yīng),只不過設(shè)置的是在本節(jié)點上面的并發(fā)table scan 和range scan 數(shù)量。如果在系統(tǒng)中有大量的并發(fā)而且一般都不使用并行的話,需要注意此參數(shù)的設(shè)置。默認(rèn)為MaxNoOfConcurrentScans * node 數(shù)目;
BatchSizePerLocalScan:該參用于計算在Localscan(并發(fā))過程中被鎖住的記錄數(shù),文檔上說明默認(rèn)為64;
LongMessageBuffer:這個參數(shù)定義的是消息傳遞時候的buffer 大小,而這里的消息傳遞主要是內(nèi)部信息傳遞以及節(jié)點與節(jié)點之間的信息傳遞。這個參數(shù)一般很少需要調(diào)整,默認(rèn)大小為1MB 大小;
下面介紹一下與LOG 相關(guān)的參數(shù)配置說明,包括LOG level。這里的LOG level 有多種,從0 到15,也就是共16 種。如果設(shè)定為0,則表示不記錄任何LOG。如果設(shè)置為最高level,也就是15,則表示所有的信息都會通過標(biāo)準(zhǔn)輸出來記錄LOG.由于這里的所有信息實際上都會傳遞到管理節(jié)點的cluster LOG 中,所以,一般來說,除了啟動時候的LOG級別需要設(shè)置為1 之外,其他所有的LOG level 都只需要設(shè)置為0 就可以了。
NoOfFragmentLogFiles:這個參數(shù)實際上和Oracle 的redo LOG 的group 一樣的。其實就是ndb 的redo LOG group 數(shù)目,這些redo LOG 用于存放ndb 引擎所做的所有需要變更數(shù)據(jù)的事情,以及各種checkpoint 信息等。默認(rèn)值為8;
MaxNoOfSavedMessages:這個參數(shù)設(shè)定了可以保留的trace 文件(在節(jié)點crash的時候參數(shù))的最大個數(shù),文檔上面說此參數(shù)默認(rèn)值為25。
LogLevelStartup:設(shè)定啟動ndb 節(jié)點時候需要記錄的信息的級別(不同級別所記錄的信息的詳細(xì)程度不一樣),默認(rèn)級別為1;
LogLevelShutdown:設(shè)定關(guān)閉ndb 節(jié)點時候記錄日志的信息的級別,默認(rèn)為0;
LogLevelStatistic:這個參數(shù)是針對于統(tǒng)計相關(guān)的日志的,就像更新數(shù)量,插入數(shù)量,buffer 使用情況,主鍵數(shù)量等等統(tǒng)計信息。默認(rèn)日志級別為0;
LogLevelCheckpoint:checkpoint 日志記錄級別(包括local 和global 的),默認(rèn)為0;
LogLevelNodeRestart:ndb 節(jié)點重啟過程日志級別,默認(rèn)為0;
LogLevelConnection:各節(jié)點之間連接相關(guān)日志記錄的級別,默認(rèn)0;
LogLevelError:在整個Cluster 中錯誤或者警告信息的日志記錄級別,默認(rèn)0;
LogLevelInfo:普通信息的日志記錄級別,默認(rèn)為0。這里再介紹幾個用來作為LOG 記錄時候需要用到的Buffer 相關(guān)參數(shù),這些參數(shù)對于性能都有一定的影響。當(dāng)然,如果節(jié)點運行在無盤模式下的話,則影響不大。
UndoIndexBuffer:undo index buffer 主要是用于存儲主鍵hash 索引在變更之后產(chǎn)生的undo 信息的緩沖區(qū)。默認(rèn)值為2M 大小,最小可以設(shè)置為1M,對于大多數(shù)應(yīng)用來說,2M 的默認(rèn)值是夠的.當(dāng)然,在更新非常頻繁的應(yīng)用里面,適當(dāng)?shù)恼{(diào)大此參數(shù)值對性能還是有一定幫助的。如果此參數(shù)太小,會報出677 錯誤:Index UNDO buffers overloaded;
UndoDataBuffer:和undo index buffer 類似,undo data buffer 主要是在數(shù)據(jù)發(fā)生變更的時候所需要的undo 信息的緩沖區(qū)。默認(rèn)大小為16M,最小同樣為1M。當(dāng)這個參數(shù)值太小的時候,系統(tǒng)會報出如下的錯誤:Data UNDO buffers overloaded,錯誤號為891;
RedoBuffer:Redo buffer 是用redo LOG 信息的緩沖區(qū),默認(rèn)大小為8M,最小為1M。如果此buffer 太小,會報1221 錯誤:REDO LOG buffers overloaded.
此外,NDB 節(jié)點還有一些和metadata 以及內(nèi)部控制相關(guān)的參數(shù),但大部分參數(shù)都基本上不需要任何調(diào)整,所以就不做進(jìn)一步介紹。如果有興趣希望詳細(xì)了解,可以根據(jù)MySQL官方的相關(guān)參考手冊,手冊上面都有較為詳細(xì)的介紹。
3、SQL 節(jié)點相關(guān)配置說明
1) 和其他節(jié)點一樣,先介紹一些適用于所有節(jié)點的[MySQLD DEFAULT]參數(shù)ArbitrationRank:這個參數(shù)在介紹管理節(jié)點的參數(shù)時候已經(jīng)介紹過了,用于設(shè)定節(jié)點級別(主要是在多個節(jié)點在處理相關(guān)操作時候出現(xiàn)分歧時候設(shè)定裁定者)的。一般來說,所有的SQL 節(jié)點都應(yīng)該設(shè)定為2;
ArbitrationDelay:默認(rèn)為0,裁定者在開始裁定之前需要被delay 多久,單位為毫秒。一般不需要更改默認(rèn)值。
BatchByteSize:在做全表掃描或者索引范圍掃描的時候,每一次fatch 的數(shù)據(jù)量,默認(rèn)為32KB;
BatchSize:類似BatchByteSize 參數(shù),只不過BatchSize 所設(shè)定的是每一次fetch的record 數(shù)量,而不是物理總量,默認(rèn)為64,最大為992(暫時還不知道這個值是基于什么理論而設(shè)定的)。在實際運行query 的過程中,fetch 的量受到BatchByteSize 和BatchSize兩個參數(shù)的共同制約,二者取最小值;
MaxScanBatchSize:在Cluster 環(huán)境中,進(jìn)行并行處理的情況下,所有節(jié)點的BatchSize 總和的最大值。默認(rèn)值為256KB,最大值為16MB。
2) 每個節(jié)點獨有的[MySQLD]參數(shù)組,僅有id 和hostname 參數(shù)需要配置,在之前各類節(jié)點均有介紹了,這里就不再累述。
轉(zhuǎn)自http://www.cnblogs.com/alang85/archive/2011/11/18/2253900.html