这是一个 Perl 脚本,可用于估算 MySQL 数据库转换为使用NDBCLUSTER
存储引擎时所需的空间量。与本节中讨论的其他实用程序不同,它不需要访问 NDB Cluster(事实上,没有理由这样做)。但是,它确实需要访问待测数据库所在的MySQL服务器。
要求
正在运行的 MySQL 服务器。服务器实例不必为 NDB Cluster 提供支持。
Perl 的工作安装。
该
DBI
模块,如果它还不是您的 Perl 安装的一部分,可以从 CPAN 获得。(许多 Linux 和其他操作系统发行版都为这个库提供了自己的包。)具有必要权限的 MySQL 用户帐户。如果您不想使用现有帐户,那么使用创建一个帐户(要检查的数据库的名称在哪里)就足够了 。
GRANT USAGE ON
db_name
.*db_name
ndb_size.pl
也可以在 MySQL 源代码中找到storage/ndb/tools
。
下表显示了 可以与ndb_size.pl一起使用的选项。表后有其他说明。
表 23.49 与程序 ndb_size.pl 一起使用的命令行选项
格式 | 描述 | 添加、弃用或删除 |
---|---|---|
要检查的一个或多个数据库;逗号分隔的列表;默认为 ALL(使用在服务器上找到的所有数据库) | (支持所有基于 MySQL 8.0 的 NDB 版本) |
|
以 host[:port] 格式指定主机和可选端口 | (支持所有基于 MySQL 8.0 的 NDB 版本) |
|
指定要连接的套接字 | (支持所有基于 MySQL 8.0 的 NDB 版本) |
|
指定 MySQL 用户名 | (支持所有基于 MySQL 8.0 的 NDB 版本) |
|
指定 MySQL 用户密码 | (支持所有基于 MySQL 8.0 的 NDB 版本) |
|
设置输出格式(文本或 HTML) | (支持所有基于 MySQL 8.0 的 NDB 版本) |
|
跳过逗号分隔列表中的任何表格 | (支持所有基于 MySQL 8.0 的 NDB 版本) |
|
跳过以逗号分隔的列表中的任何数据库 | (支持所有基于 MySQL 8.0 的 NDB 版本) |
|
将数据库中的所有查询保存到指定的文件中 | (支持所有基于 MySQL 8.0 的 NDB 版本) |
|
从指定文件加载所有查询;没有连接到数据库 | (支持所有基于 MySQL 8.0 的 NDB 版本) |
|
指定表来处理唯一索引大小计算 | (支持所有基于 MySQL 8.0 的 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,如果需要,也可以指定socket;默认为/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
表行所需 的和。