ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          1,不支持創建臨時表(temporary tables);

          2,創建索引和鍵的限制:

          (1),在列上創建索引長度超過3072bytes會成功,但是只能使用索引的前3072bytes。并且會顯示警告信息"specified key was too long,max key lenght is 3072 keys"

           

          不支持的特征

          1,在NDB創建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參數解釋  ---from 《mysql性能調優和架構設計》

          1) [NDBD DEFAULT]中的配置項:
          NoOfReplicas:定義在Cluster 環境中相同數據的分數,通俗一點來說就是每一份數據存放NoOfReplicas 份。如果希望能夠冗余,那么至少設置為2(一般情況來說此參數值設置為2 就夠了),最大只能設置為4。另外,NoOfReplicas 值得大小,實際上也就是nodegroup 大小的定義。NoOfReplicas 參數沒有系統默認值,所以必須設定,而且只能設置在[NDBD DEFAULT]中,因為此數值在整個Cluster 集群中一個node group 中所有的NDBD 節點都需要一樣。另外NoOfReplicas 的數目對整個Cluster 環境中NDB 節點數量有較大的影響,因為NDB 節點總數量是NoOfReplicas * 2 * node_group_num;DataDir:指定本地的pid 文件,trace 文件,日志文件以及錯誤日志子等存放的路徑,無系統默認地址,所以必須設定;

          DataMemory:設定用于存放數據和主鍵索引的內存段的大小。這個大小限制了能存放的數據的大小,因為ndb 存儲引擎需屬于內存數據庫引擎,需要將所有的數據(包括索引)都load 到內存中。這個參數并不是一定需要設定的,但是默認值非常小(80M),只也就是說如果使用默認值,將只能存放很小的數據。參數設置需要帶上單位,如512M,2G 等。另外,DataMemory 里面還會存放UNDO 相關的信息,所以,事務的大小和事務并發量也決定了DataMemory 的使用量,建議盡量使用小事務;


          IndexMemory:設定用于存放索引(非主鍵)數據的內存段大小。和DataMemory類似,這個參數值的大小同樣也會限制該節點能存放的數據的大小,因為索引的大小是隨著數據量增長而增長的。參數設置也如DataMemory 一樣需要單位。IndexMemory 默認大小為18M;實際上,一個NDB 節點能存放的數據量是會受到DataMemory 和IndexMemory 兩個參數設置的約束,兩者任何一個達到限制數量后,都無法再增加能存儲的數據量。如果繼續存入數據系統會報錯“table is full”。

          FileSystemPath:指定redo 日志,undo 日志,數據文件以及meta 數據等的存放位置,默認位置為DataDir 的設置,并且在ndbd 初始化的時候,參數所設定的文件夾必須存在。在第一次啟動的時候,ndbd 進程會在所設定的文件夾下建立一個子文件夾叫ndb_id_fs,這里的id 為節點的ID 值,如節點id 為3 則文件夾名稱為ndb_3_fs。當然,這個參數也不一定非得設置在[NDBD DEFAULT]參數組里面讓所有節點的設置都一樣(不過建議這樣設置),還可以設置在[NDBD]參數組下為每一個節點單獨設置自己的FileSystemPath值;

          BackupDataDir:設置備份目錄路徑,默認為FileSystemPath/BACKUP。接下來的幾個參數也是非常重要的,主要都是與并行事務數和其他一些并行限制有關的參數設置。
          MaxNoOfConcurrentTransactions:設置在一個節點上面的最大并行事務數目,默認為4096,一般情況下來說是足夠了的。這個參數值所有節點必須設置一樣,所以一般都是設置在[NDBD DEFAULT]參數組下面;


          MaxNoOfConcurrentOperations:設置同時能夠被更新(或者鎖定)的記錄數量。一般來說可以設置為在整個集群中相同時間內可能被更新(或者鎖定)的總記錄數,除以NDB節點數,所得到的值。

          MaxNoOfLocalOperations:此參數默認是MaxNoOfConcurrentOperations * 1.1的大小,也就是說,每個節點一般可以處理超過平均值的10%的操作記錄數量。但是一般來說,MySQL 建議單獨設置此參數而不要使用默認值,并且將此參數設置得更較大一些;

          以下的三個參數主要是在一個事務中執行一條query 的時候臨時用到存儲(或者內存)的情況下所使用到的,所使用的存儲信息會在事務結束(commit 或者rollback)的時候釋放資源;

          MaxNoOfConcurrentIndexOperations:這個參數和MaxNoOfConcurrentOperations參數比較類似,只不過所針對的是Index 的record 而已。其默認值為8192,對伊一般的系統來說都已經足夠了,只有在事務并發非常非常大的系統上才有需要增加這個參數的設置。當然,此參數越大,系統運行時候為此而消耗的內存也會越大;

          MaxNoOfFiredTriggers:觸發唯一索引(hash index)操作的最大的操作數,這個操作數是影響索引的操作條目數,而不是操作的次數。系統默認值為4000,一般系統來說夠用了。當然,如果系統并發事務非常高,而且涉及到索引的操作也非常多,自然也就需要提高這個參數值的設置了;

          TransactionBufferMemory:這個buffer 值得設置主要是指定用于跟蹤索引操作而使用的。主要是用來存儲索引操作中涉及到的索引key 值和column 的實際信息。這這個參數的值一般來說也很少需要調整,因為實際系統中需要的這部分buffer 量非常小,雖然默認值只是1M,但是對于一般應用也已經足夠了;

          下面要介紹到的參數主要是在系統處理中做table scan 或者range scan 的時候使用的一些buffer 的相關設置,設置的恰當可以既節省內存又達到足夠的性能要求。

          MaxNoOfConcurrentScans:這個參數主要控制在Cluster 環境中并發的table scan和range scan 的總數量平均分配到每一個節點后的平均值。一般來說,每一個scan 都是通過并行的掃描所有的partition 來完成的,每一個partition 的掃描都會在該partition所在的節點上面使用一個scan record。所以,這個參數值得大小應該是“scan record”數目* 節點數目。參數默認大小為256,最大只能設置為500;


          MaxNoOfLocalScans:和上面的這個參數相對應,只不過設置的是在本節點上面的并發table scan 和range scan 數量。如果在系統中有大量的并發而且一般都不使用并行的話,需要注意此參數的設置。默認為MaxNoOfConcurrentScans * node 數目;


          BatchSizePerLocalScan:該參用于計算在Localscan(并發)過程中被鎖住的記錄數,文檔上說明默認為64;

          LongMessageBuffer:這個參數定義的是消息傳遞時候的buffer 大小,而這里的消息傳遞主要是內部信息傳遞以及節點與節點之間的信息傳遞。這個參數一般很少需要調整,默認大小為1MB 大小;

          下面介紹一下與LOG 相關的參數配置說明,包括LOG level。這里的LOG level 有多種,從0 到15,也就是共16 種。如果設定為0,則表示不記錄任何LOG。如果設置為最高level,也就是15,則表示所有的信息都會通過標準輸出來記錄LOG.由于這里的所有信息實際上都會傳遞到管理節點的cluster LOG 中,所以,一般來說,除了啟動時候的LOG級別需要設置為1 之外,其他所有的LOG level 都只需要設置為0 就可以了。

          NoOfFragmentLogFiles:這個參數實際上和Oracle 的redo LOG 的group 一樣的。其實就是ndb 的redo LOG group 數目,這些redo LOG 用于存放ndb 引擎所做的所有需要變更數據的事情,以及各種checkpoint 信息等。默認值為8;


          MaxNoOfSavedMessages:這個參數設定了可以保留的trace 文件(在節點crash的時候參數)的最大個數,文檔上面說此參數默認值為25。

          LogLevelStartup:設定啟動ndb 節點時候需要記錄的信息的級別(不同級別所記錄的信息的詳細程度不一樣),默認級別為1;

          LogLevelShutdown:設定關閉ndb 節點時候記錄日志的信息的級別,默認為0;

          LogLevelStatistic:這個參數是針對于統計相關的日志的,就像更新數量,插入數量,buffer 使用情況,主鍵數量等等統計信息。默認日志級別為0;

          LogLevelCheckpoint:checkpoint 日志記錄級別(包括local 和global 的),默認為0;


          LogLevelNodeRestart:ndb 節點重啟過程日志級別,默認為0;

          LogLevelConnection:各節點之間連接相關日志記錄的級別,默認0;


          LogLevelError:在整個Cluster 中錯誤或者警告信息的日志記錄級別,默認0;

          LogLevelInfo:普通信息的日志記錄級別,默認為0。這里再介紹幾個用來作為LOG 記錄時候需要用到的Buffer 相關參數,這些參數對于性能都有一定的影響。當然,如果節點運行在無盤模式下的話,則影響不大。


          UndoIndexBuffer:undo index buffer 主要是用于存儲主鍵hash 索引在變更之后產生的undo 信息的緩沖區。默認值為2M 大小,最小可以設置為1M,對于大多數應用來說,2M 的默認值是夠的.當然,在更新非常頻繁的應用里面,適當的調大此參數值對性能還是有一定幫助的。如果此參數太小,會報出677 錯誤:Index UNDO buffers overloaded;


          UndoDataBuffer:和undo index buffer 類似,undo data buffer 主要是在數據發生變更的時候所需要的undo 信息的緩沖區。默認大小為16M,最小同樣為1M。當這個參數值太小的時候,系統會報出如下的錯誤:Data UNDO buffers overloaded,錯誤號為891;



          RedoBuffer:Redo buffer 是用redo LOG 信息的緩沖區,默認大小為8M,最小為1M。如果此buffer 太小,會報1221 錯誤:REDO LOG buffers overloaded.


          此外,NDB 節點還有一些和metadata 以及內部控制相關的參數,但大部分參數都基本上不需要任何調整,所以就不做進一步介紹。如果有興趣希望詳細了解,可以根據MySQL官方的相關參考手冊,手冊上面都有較為詳細的介紹。

          3、SQL 節點相關配置說明
          1) 和其他節點一樣,先介紹一些適用于所有節點的[MySQLD DEFAULT]參數ArbitrationRank:這個參數在介紹管理節點的參數時候已經介紹過了,用于設定節點級別(主要是在多個節點在處理相關操作時候出現分歧時候設定裁定者)的。一般來說,所有的SQL 節點都應該設定為2;

          ArbitrationDelay:默認為0,裁定者在開始裁定之前需要被delay 多久,單位為毫秒。一般不需要更改默認值。

          BatchByteSize:在做全表掃描或者索引范圍掃描的時候,每一次fatch 的數據量,默認為32KB;

          BatchSize:類似BatchByteSize 參數,只不過BatchSize 所設定的是每一次fetch的record 數量,而不是物理總量,默認為64,最大為992(暫時還不知道這個值是基于什么理論而設定的)。在實際運行query 的過程中,fetch 的量受到BatchByteSize 和BatchSize兩個參數的共同制約,二者取最小值;


          MaxScanBatchSize:在Cluster 環境中,進行并行處理的情況下,所有節點的BatchSize 總和的最大值。默認值為256KB,最大值為16MB。

          2) 每個節點獨有的[MySQLD]參數組,僅有id 和hostname 參數需要配置,在之前各類節點均有介紹了,這里就不再累述。


          轉自http://www.cnblogs.com/alang85/archive/2011/11/18/2253900.html

          posted on 2014-12-23 20:09 ivaneeo 閱讀(692) 評論(0)  編輯  收藏 所屬分類: GNU牛力
          主站蜘蛛池模板: 含山县| 永康市| 石河子市| 富蕴县| 南雄市| 黄石市| 余姚市| 郁南县| 虎林市| 闸北区| 太康县| 子洲县| 霍林郭勒市| 纳雍县| 北川| 特克斯县| 达尔| 静海县| 巨鹿县| 墨竹工卡县| 和龙市| 壤塘县| 汝城县| 绍兴市| 南康市| 富川| 当阳市| 外汇| 富源县| 富裕县| 大英县| 通州区| 桂东县| 宜君县| 崇文区| 滦平县| 开平市| 红原县| 平江县| 比如县| 策勒县|