這是一個 Perl 腳本,可用於估計如果將 MySQL 資料庫轉換為使用 NDBCLUSTER
儲存引擎,將需要多少空間。與本節討論的其他公用程式不同,它不需要存取 NDB 叢集(事實上,它沒有這樣做的理由)。但是,它需要存取要測試的資料庫所在的 MySQL 伺服器。
ndb_size.pl 在 NDB 9.0.0 及更高版本中已棄用,且不再支援。您應該預期它會從未來版本的 NDB 叢集發行版本中移除,並相應地修改任何相依的應用程式。
需求
正在執行的 MySQL 伺服器。伺服器執行個體不必提供對 NDB 叢集的支援。
可運作的 Perl 安裝。
DBI
模組,如果它還不是您 Perl 安裝的一部分,可以從 CPAN 取得。(許多 Linux 和其他作業系統發行版本都提供此程式庫的專屬套件。)具有必要權限的 MySQL 使用者帳戶。如果您不想使用現有的帳戶,那麼使用
GRANT USAGE ON
建立一個帳戶,其中db_name
.*db_name
是要檢查的資料庫的名稱,就足以滿足此目的。
ndb_size.pl
也可在 MySQL 來源的 storage/ndb/tools
中找到。
以下表格顯示可以與 ndb_size.pl 一起使用的選項。其他說明在表格之後。
用法
perl ndb_size.pl [--database={db_name|ALL}] [--hostname=host[:port]] [--socket=socket] \
[--user=user] [--password=password] \
[--help|-h] [--format={html|text}] \
[--loadqueries=file_name] [--savequeries=file_name]
預設情況下,此公用程式會嘗試分析伺服器上的所有資料庫。您可以使用 --database
選項指定單一資料庫;可以使用 ALL
作為資料庫的名稱來明確指定預設行為。您也可以使用 --excludedbs
選項以及以逗號分隔的要略過的資料庫名稱清單,來排除一個或多個資料庫。類似地,您可以讓特定的表格被略過,方法是在選用的 --excludetables
選項之後列出它們的名稱(以逗號分隔)。可以使用 --hostname
來指定主機名稱;預設值是 localhost
。除了主機之外,您還可以使用 host
:port
格式作為 --hostname
的值,來指定連接埠。預設連接埠號碼是 3306。如果需要,您也可以指定通訊端;預設值是 /var/lib/mysql.sock
。可以使用顯示的對應選項來指定 MySQL 使用者名稱和密碼。也可以使用 --format
選項來控制輸出的格式;這可以使用 html
或 text
的值,其中 text
是預設值。此處顯示文字輸出的範例
$> ndb_size.pl --database=test --socket=/tmp/mysql.sock
ndb_size.pl report for database: 'test' (1 tables)
--------------------------------------------------
Connected to: DBI:mysql:host=localhost;mysql_socket=/tmp/mysql.sock
Including information for versions: 4.1, 5.0, 5.1
test.t1
-------
DataMemory for Columns (* means varsized DataMemory):
Column Name Type Varsized Key 4.1 5.0 5.1
HIDDEN_NDB_PKEY bigint PRI 8 8 8
c2 varchar(50) Y 52 52 4*
c1 int(11) 4 4 4
-- -- --
Fixed Size Columns DM/Row 64 64 12
Varsize Columns DM/Row 0 0 4
DataMemory for Indexes:
Index Name Type 4.1 5.0 5.1
PRIMARY BTREE 16 16 16
-- -- --
Total Index DM/Row 16 16 16
IndexMemory for Indexes:
Index Name 4.1 5.0 5.1
PRIMARY 33 16 16
-- -- --
Indexes IM/Row 33 16 16
Summary (for THIS table):
4.1 5.0 5.1
Fixed Overhead DM/Row 12 12 16
NULL Bytes/Row 4 4 4
DataMemory/Row 96 96 48
(Includes overhead, bitmap and indexes)
Varsize Overhead DM/Row 0 0 8
Varsize NULL Bytes/Row 0 0 4
Avg Varside DM/Row 0 0 16
No. Rows 0 0 0
Rows/32kb DM Page 340 340 680
Fixedsize DataMemory (KB) 0 0 0
Rows/32kb Varsize DM Page 0 0 2040
Varsize DataMemory (KB) 0 0 0
Rows/8kb IM Page 248 512 512
IndexMemory (KB) 0 0 0
Parameter Minimum Requirements
------------------------------
* indicates greater than default
Parameter Default 4.1 5.0 5.1
DataMemory (KB) 81920 0 0 0
NoOfOrderedIndexes 128 1 1 1
NoOfTables 128 1 1 1
IndexMemory (KB) 18432 0 0 0
NoOfUniqueHashIndexes 64 0 0 0
NoOfAttributes 1000 3 3 3
NoOfTriggers 768 5 5 5
為了偵錯目的,可以使用 --savequeries
將包含此腳本所執行查詢的 Perl 陣列,儲存到指定檔案中;可以使用 --loadqueries
指定在腳本執行期間讀取的包含此類陣列的檔案。這些選項都沒有預設值。
若要以 HTML 格式產生輸出,請使用 --format
選項並將輸出重新導向至檔案,如下所示
$> ndb_size.pl --database=test --socket=/tmp/mysql.sock --format=html > ndb_size.html
(如果沒有重新導向,輸出會傳送到 stdout
。)
此腳本的輸出包含以下資訊
要容納所分析的表格,所需的
DataMemory
、IndexMemory
、MaxNoOfTables
、MaxNoOfAttributes
、MaxNoOfOrderedIndexes
和MaxNoOfTriggers
組態參數的最小值。資料庫中定義的所有表格、屬性、已排序索引和唯一雜湊索引的記憶體需求。
每個表格和表格列所需的
IndexMemory
和DataMemory
。