这是一个 Perl 脚本,用于估算 MySQL 数据库转换为使用 NDBCLUSTER
存储引擎时所需的空间。与本节中讨论的其他实用程序不同的是,它不需要访问 NDB 集群(实际上,没有理由这样做)。然而,它需要访问要测试的 MySQL 服务器。
要求
-
一个正在运行的 MySQL 服务器。服务器实例不需要支持 NDB 集群。
-
一个工作的 Perl 安装。
-
DBI 模块,可以从 CPAN 获得,如果它不是 Perl 安装的一部分。(许多 Linux 和其他操作系统发行版提供了该库的包。)
-
一个拥有必要权限的 MySQL 用户帐户。如果您不想使用现有的帐户,那么使用
GRANT USAGE ON
—其中db_name
.*db_name
是要检查的数据库的名称—足以满足这个目的。
ndb_size.pl
也可以在 MySQL 源代码中找到,位于 storage/ndb/tools
。
可以与 ndb_size.pl 一起使用的选项如下表所示。表后面是详细描述。
表 25.49 与程序 ndb_size.pl 一起使用的命令行选项
Format | Description | Added, Deprecated, or Removed |
---|---|---|
要检查的数据库或数据库列表;逗号分隔的列表;默认是 ALL(使用服务器上的所有数据库) |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
指定主机和可选端口,以 host[:port] 格式 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
指定要连接的套接字 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
指定 MySQL 用户名 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
指定 MySQL 用户密码 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
设置输出格式(文本或 HTML) |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
跳过列表中的任何表 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
跳过列表中的任何数据库 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
将所有查询保存到指定的文件中 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
从指定的文件中加载所有查询;不连接到数据库 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
指定处理唯一索引大小计算的表 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
使用
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
为了调试目的,Perl 数组包含该脚本运行的查询可以从文件中读取,使用 --savequeries
选项保存到文件中;也可以使用 --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
。