ndb_desc 提供一個或多個 NDB
資料表的詳細描述。
用法
ndb_desc -c connection_string tbl_name -d db_name [options]
ndb_desc -c connection_string index_name -d db_name -t tbl_name
與 ndb_desc 一起使用的其他選項列在本節稍後。
範例輸出
MySQL資料表建立與填充語句
USE test;
CREATE TABLE fish (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
length_mm INT NOT NULL,
weight_gm INT NOT NULL,
PRIMARY KEY pk (id),
UNIQUE KEY uk (name)
) ENGINE=NDB;
INSERT INTO fish VALUES
(NULL, 'guppy', 35, 2), (NULL, 'tuna', 2500, 150000),
(NULL, 'shark', 3000, 110000), (NULL, 'manta ray', 1500, 50000),
(NULL, 'grouper', 900, 125000), (NULL ,'puffer', 250, 2500);
來自 ndb_desc 的輸出
$> ./ndb_desc -c localhost fish -d test -p
-- fish --
Version: 2
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 4
Number of primary keys: 1
Length of frm data: 337
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
PartitionCount: 2
FragmentCount: 2
PartitionBalance: FOR_RP_BY_LDM
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options:
HashMap: DEFAULT-HASHMAP-3840-2
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY DYNAMIC
length_mm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
weight_gm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
uk(name) - OrderedIndex
uk$unique(name) - UniqueHashIndex
-- Per partition info --
Partition Row count Commit count Frag fixed memory Frag varsized memory Extent_space Free extent_space
0 2 2 32768 32768 0 0
1 4 4 32768 32768 0 0
透過使用以空格分隔的名稱,可以在單次調用 ndb_desc 中獲得多個資料表的資訊。所有資料表必須在同一個資料庫中。
您可以使用 --table
(簡寫形式:-t
)選項,並將索引的名稱作為 ndb_desc 的第一個引數,來取得關於特定索引的額外資訊,如下所示
$> ./ndb_desc uk -d test -t fish
-- uk --
Version: 2
Base table: fish
Number of attributes: 1
Logging: 0
Index type: OrderedIndex
Index status: Retrieved
-- Attributes --
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
-- IndexTable 10/uk --
Version: 2
Fragment type: FragUndefined
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: yes
Number of attributes: 2
Number of primary keys: 1
Length of frm data: 0
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 2
ForceVarPart: 0
PartitionCount: 2
FragmentCount: 2
FragmentCountType: ONE_PER_LDM_PER_NODE
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options:
-- Attributes --
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
NDB$TNODE Unsigned [64] PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
-- Indexes --
PRIMARY KEY(NDB$TNODE) - UniqueHashIndex
當以這種方式指定索引時,--extra-partition-info
和 --extra-node-info
選項不起作用。
輸出中的 Version
欄包含資料表的結構描述物件版本。有關解讀此值的資訊,請參閱 NDB 結構描述物件版本。
可以使用嵌入在 CREATE TABLE
和 ALTER TABLE
語句中的 NDB_TABLE
註解設定的三個資料表屬性,在 ndb_desc 輸出中也可見。資料表的 FRAGMENT_COUNT_TYPE
總是顯示在 FragmentCountType
欄中。READ_ONLY
和 FULLY_REPLICATED
,如果設定為 1,則顯示在 Table options
欄中。您可以在 mysql 客戶端中執行以下 ALTER TABLE
語句後看到此情況
mysql> ALTER TABLE fish COMMENT='NDB_TABLE=READ_ONLY=1,FULLY_REPLICATED=1';
1 row in set, 1 warning (0.00 sec)
mysql> SHOW WARNINGS\G
+---------+------+---------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------------------------------------------------+
| Warning | 1296 | Got error 4503 'Table property is FRAGMENT_COUNT_TYPE=ONE_PER_LDM_PER_NODE but not in comment' from NDB |
+---------+------+---------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
發出警告是因為 READ_ONLY=1
要求資料表的片段計數類型為(或設定為)ONE_PER_LDM_PER_NODE_GROUP
;在這種情況下,NDB
會自動設定此值。您可以使用 SHOW CREATE TABLE
來檢查 ALTER TABLE
語句是否具有所需的效果
mysql> SHOW CREATE TABLE fish\G
*************************** 1. row ***************************
Table: fish
Create Table: CREATE TABLE `fish` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`length_mm` int(11) NOT NULL,
`weight_gm` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk` (`name`)
) ENGINE=ndbcluster DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
COMMENT='NDB_TABLE=READ_BACKUP=1,FULLY_REPLICATED=1'
1 row in set (0.01 sec)
因為 FRAGMENT_COUNT_TYPE
沒有明確設定,因此其值不會顯示在 SHOW CREATE TABLE
列印的註解文字中。ndb_desc,但是,會顯示此屬性的更新值。Table options
欄會顯示剛啟用的二進制屬性。您可以在此處顯示的輸出中看到此情況(強調文字)
$> ./ndb_desc -c localhost fish -d test -p
-- fish --
Version: 4
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 4
Number of primary keys: 1
Length of frm data: 380
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
PartitionCount: 1
FragmentCount: 1
FragmentCountType: ONE_PER_LDM_PER_NODE_GROUP
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options: readbackup, fullyreplicated
HashMap: DEFAULT-HASHMAP-3840-1
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY DYNAMIC
length_mm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
weight_gm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
uk(name) - OrderedIndex
uk$unique(name) - UniqueHashIndex
-- Per partition info --
Partition Row count Commit count Frag fixed memory Frag varsized memory Extent_space Free extent_space
有關這些資料表屬性的更多資訊,請參閱 第15.1.20.12節,「設定NDB註解選項」。
Extent_space
和 Free extent_space
欄僅適用於磁碟上有欄的 NDB
資料表;對於僅具有記憶體內欄的資料表,這些欄總是包含值 0
。
為了說明它們的使用,我們修改先前的範例。首先,我們必須建立必要的磁碟資料物件,如下所示
CREATE LOGFILE GROUP lg_1
ADD UNDOFILE 'undo_1.log'
INITIAL_SIZE 16M
UNDO_BUFFER_SIZE 2M
ENGINE NDB;
ALTER LOGFILE GROUP lg_1
ADD UNDOFILE 'undo_2.log'
INITIAL_SIZE 12M
ENGINE NDB;
CREATE TABLESPACE ts_1
ADD DATAFILE 'data_1.dat'
USE LOGFILE GROUP lg_1
INITIAL_SIZE 32M
ENGINE NDB;
ALTER TABLESPACE ts_1
ADD DATAFILE 'data_2.dat'
INITIAL_SIZE 48M
ENGINE NDB;
(有關剛顯示的語句和它們建立的物件的更多資訊,請參閱 第25.6.11.1節,「NDB叢集磁碟資料物件」,以及 第15.1.16節,「CREATE LOGFILE GROUP 語句」,和 第15.1.21節,「CREATE TABLESPACE 語句」。)
現在,我們可以建立和填充一個版本的 fish
資料表,該資料表將其 2 個欄儲存在磁碟上(如果資料表已經存在,則先刪除其先前版本)
DROP TABLE IF EXISTS fish;
CREATE TABLE fish (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
length_mm INT NOT NULL,
weight_gm INT NOT NULL,
PRIMARY KEY pk (id),
UNIQUE KEY uk (name)
) TABLESPACE ts_1 STORAGE DISK
ENGINE=NDB;
INSERT INTO fish VALUES
(NULL, 'guppy', 35, 2), (NULL, 'tuna', 2500, 150000),
(NULL, 'shark', 3000, 110000), (NULL, 'manta ray', 1500, 50000),
(NULL, 'grouper', 900, 125000), (NULL ,'puffer', 250, 2500);
針對此版本的資料表執行時,ndb_desc 會顯示以下輸出
$> ./ndb_desc -c localhost fish -d test -p
-- fish --
Version: 1
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 4
Number of primary keys: 1
Length of frm data: 1001
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
PartitionCount: 2
FragmentCount: 2
PartitionBalance: FOR_RP_BY_LDM
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options: readbackup
HashMap: DEFAULT-HASHMAP-3840-2
Tablespace id: 16
Tablespace: ts_1
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
name Varchar(80;utf8mb4_0900_ai_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
length_mm Int NOT NULL AT=FIXED ST=DISK
weight_gm Int NOT NULL AT=FIXED ST=DISK
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
uk(name) - OrderedIndex
uk$unique(name) - UniqueHashIndex
-- Per partition info --
Partition Row count Commit count Frag fixed memory Frag varsized memory Extent_space Free extent_space
0 2 2 32768 32768 1048576 1044440
1 4 4 32768 32768 1048576 1044400
這表示從每個分割區上的資料表空間為此資料表配置了 1048576 個位元組,其中 1044440 個位元組仍可用於額外的儲存空間。換句話說,目前正在使用每個分割區 1048576 - 1044440 = 4136 個位元組來儲存此資料表基於磁碟的欄的資料。顯示為 Free extent_space
的位元組數僅適用於儲存來自 fish
資料表的磁碟欄資料;因此,當從 Information Schema FILES
資料表選擇時,它不可見。
對於磁碟資料表,也會顯示 Tablespace id
和 Tablespace
。
對於完全複製的資料表,ndb_desc 僅顯示持有主要分割區片段複本的節點;具有(僅)複本片段複本的節點會被忽略。您可以使用 mysql 客戶端,從 table_distribution_status
、table_fragments
、table_info
和 table_replicas
資料表在 ndbinfo
資料庫中取得此類資訊。
下表中顯示了所有可與 ndb_desc 一起使用的選項。其他描述會在表格之後。
--auto-inc
、-a
顯示資料表的
AUTO_INCREMENT
欄的下一個值(如果有的話)。--blob-info
、-b
使用此選項也需要使用
--extra-partition-info
(-p
) 選項。-
命令列格式 --character-sets-dir=路徑
包含字元集的目錄。
-
命令列格式 --connect-retries=#
類型 整數 預設值 12
最小值 0
最大值 12
放棄之前重試連線的次數。
-
命令列格式 --connect-retry-delay=#
類型 整數 預設值 5
最小值 0
最大值 5
嘗試聯絡管理伺服器之間等待的秒數。
-
命令列格式 --connect-string=connection_string
類型 字串 預設值 [無]
與
--ndb-connectstring
相同。 --context
,-x
顯示表格的額外關聯資訊,例如綱要、資料庫名稱、表格名稱和表格的內部 ID。
-
命令列格式 --core-file
發生錯誤時寫入核心檔案;用於偵錯。
指定應在其中找到表格的資料庫。
-
命令列格式 --defaults-extra-file=路徑
類型 字串 預設值 [無]
在讀取全域檔案後,讀取給定的檔案。
-
命令列格式 --defaults-file=路徑
類型 字串 預設值 [無]
僅從給定的檔案讀取預設選項。
-
命令列格式 --defaults-group-suffix=字串
類型 字串 預設值 [無]
同時讀取 concat(group, suffix) 的群組。
包含關於表格分割區和其所在資料節點之間對應關係的資訊。此資訊對於驗證分佈感知機制,以及支援應用程式更有效率地存取儲存在 NDB Cluster 中的資料非常有用。
使用此選項也需要使用
--extra-partition-info
(-p
) 選項。列印關於表格分割區的其他資訊。
-
命令列格式 --help
顯示說明文字並結束。
-
命令列格式 --login-path=路徑
類型 字串 預設值 [無]
從登入檔案讀取給定的路徑。
-
命令列格式 --no-login-paths
略過從登入路徑檔案讀取選項。
-
命令列格式 --ndb-connectstring=connection_string
類型 字串 預設值 [無]
設定連線到 ndb_mgmd 的連線字串。語法:
[nodeid=
。覆寫id
;][host=]hostname
[:port
]NDB_CONNECTSTRING
和my.cnf
中的項目。 -
命令列格式 --ndb-mgm-tls=層級
類型 列舉 預設值 寬鬆
有效值 寬鬆
嚴格
設定連線到管理伺服器所需的 TLS 支援層級;為
relaxed
或strict
其中之一。relaxed
(預設值) 表示會嘗試 TLS 連線,但並非必須成功;strict
表示必須使用 TLS 連線。 -
命令列格式 --ndb-mgmd-host=connection_string
類型 字串 預設值 [無]
與
--ndb-connectstring
相同。 -
命令列格式 --ndb-nodeid=#
類型 整數 預設值 [無]
設定此節點的節點 ID,覆寫
--ndb-connectstring
設定的任何 ID。 --ndb-optimized-node-selection
命令列格式 --ndb-optimized-node-selection
啟用交易節點選擇的最佳化。預設為啟用;使用
--skip-ndb-optimized-node-selection
停用。-
命令列格式 --ndb-tls-search-path=清單
類型 路徑名稱 預設值 (Unix) $HOME/ndb-tls
預設值 (Windows) $HOMEDIR/ndb-tls
指定要搜尋 CA 檔案的目錄清單。在 Unix 平台上,目錄名稱以冒號 (
:
) 分隔;在 Windows 系統上,分號字元 (;
) 用作分隔符號。目錄參照可以是相對的或絕對的;它可以包含一個或多個環境變數,每個環境變數都以美元符號 ($
) 作為前綴,並在使用之前展開。搜尋從最左邊的命名目錄開始,並從左到右進行,直到找到檔案為止。空字串表示空的搜尋路徑,這會導致所有搜尋失敗。由單一點號 (
.
) 組成的字串表示搜尋路徑僅限於目前的工作目錄。如果未提供搜尋路徑,則使用編譯的預設值。此值取決於使用的平台:在 Windows 上,它是
\ndb-tls
;在其他平台 (包括 Linux) 上,它是$HOME/ndb-tls
。這可以透過使用-DWITH_NDB_TLS_SEARCH_PATH
編譯 NDB Cluster 來覆寫。 -
命令列格式 --no-defaults
不從任何選項檔案讀取預設選項,除了登入檔案。
-
命令列格式 --print-defaults
列印程式引數清單並結束。
--retries=
,#
-r
放棄之前嘗試連線的次數。每秒嘗試一次連線。
--table=
,tbl_name
-t
指定要搜尋索引的表格。
--unqualified
,-u
使用不完整的表格名稱。
-
命令列格式 --usage
顯示說明文字並結束;與
--help
相同。 -
命令列格式 --version
顯示版本資訊並結束。
輸出中列出的表格索引會依 ID 排序。