资源管理工具sc_toolkit
资源管理工具sc_toolkit¶
Seabox数据库提供了一个名为sc_toolkit的schema,可用于查询系统表,系统状态等信息。sc_toolkit包含多个视图(view),可以使用SQL命令访问这些视图。尽管某些对象可能需要超级用户权限,但所有数据库用户都可以访问sc_toolkit。
本文介绍了sc_toolkit中常用视图。sc_toolkit中的其它对象(视图,函数和外部表)在本文档中可能未描述。
警告:
请勿在sc_toolkit中更改数据库对象。不要在sc_toolkit中创建数据库对象。对sc_toolkit对象的更改可能会影响sc_toolkit返回的管理信息准确性。
检查资源组活动和状态¶
仅当资源组管理处于活动状态时,本节中描述的资源组活动和状态视图才有效。
sc_resgroup_config¶
使用本视图,管理员可以查看资源组的当前CPU,内存和并发限制。该视图还显示建议的限制设置。更改限制后,建议的限制将不同于当前限制,但是无法立即应用新值。
权限:所有用户均可访问此视图。
列 | 描述 |
---|---|
groupid | 资源组的ID |
groupname | 资源组的名称 |
manage_group | 是否为管理组,1表示管理组,0表示业务组 |
parentgroupid | 父级资源组的的ID |
concurrency | 为资源组指定的并发值 |
cpu_rate_limit | 为资源组指定的CPU相对限制值或-1 |
cpu_rate_ceiling | 为资源组指定的CPU绝对限制值或-1 |
cpuset | 为资源组保留的CPU核,-1表示不保留。 |
memory_limit | 为资源组指定的内存限制值,单位:MB |
io_kbps | 限制IO每秒读写字节数,单位:KB |
ic_kbps | 限制内部数据传输每秒字节数,单位:KB |
queue_priority | 队列优先级 |
sc_resgroup_status¶
使用本视图,管理员可以查看资源组的状态和活动。可以显示每个资源组正在等待运行的查询数量以及系统中当前正在活动的查询数量。该视图还显示资源组的当前内存和CPU使用率。
权限:所有用户均可访问此视图。
列 | 描述 |
---|---|
rsgname | 资源组的名称 |
groupid | 资源组的ID |
num_running | 资源组中当前正在执行的事务数 |
num_queueing | 资源组当前排队的事务数 |
num_queued | 自上次启动数据库以来,资源组的排队事务总数,不包括num_queueing。 |
num_executed | 自数据库上次启动以来,资源组中已执行事务的总数,不包括num_running。 |
total_queue_duration | 自上次启动数据库以来,所有事务排队的总时间。 |
cpu_usage | 每个executor主机上资源组的实时CPU使用率,用百分比(占全部CPU核算力的百分比)表示。 |
memory_usage | 每个executor主机上资源组的实时内存使用情况,单位:MB。 |
io_speed | 每个executor主机上资源组的实时IO速度,单位:B/s |
ic_speed | 每个executor主机上资源组的内部数据传输实时速度,单位:B/s |
说明一下cpu_usage字段值意义:假设系统有32个CPU核,每个CPU核的全部算力为100%,那么全部核的总算力为3200%。假设cpu_usage字段值为x,则表示该组的CPU使用率占总算力的x%。
cpu_usage字段是JSON格式的key:value字符串,用于显示资源组在每个executor上的CPU使用率百分比。key是executor ID,value是executor主机上资源组的CPU使用率百分比。在executor主机上运行的所有executor的CPU总使用率不应超过sc_resource_group_cpu_limit*100
。示例cpu_usage列输出:
{"-1":0.01, "0":0.31, "1":0.31}
在此示例中,executor 0和executor 1在同一主机上运行;它们的CPU使用率是相同的。
memory_usage字段也是JSON格式的key:value字符串,用于显示资源组在每个executor上的内存使用量(MB)。key是executor ID,value是executor主机上资源组的内存使用量。示例memory_usage列输出:
{"-1":8, "0":54, "1":40}
io_speed、ic_speed与cpu_usage格式类似。
sc_resgroup_status_per_host¶
本视图以主机为单位显示每个资源组的实时CPU和内存使用率(MB)。
权限:所有用户均可访问此视图。
列 | 描述 |
---|---|
rsgname | 资源组的名称 |
groupid | 资源组的ID |
hostname | executor主机的主机名 |
cpu | 主机上资源组的实时CPU使用率,用百分比(占全部CPU核算力的百分比)表示。 |
memory_used | 主机上资源组的实时内存使用情况,单位:MB。 |
io_speed | 主机上资源组的实时IO速度,单位:B/s |
ic_speed | 主机上资源组的内部数据传输实时速度,单位:B/s |
输出示例:
rsgname | groupid | hostname | cpu | memory_used | io_speed | ic_speed
--------------+---------+------------+------+-------------+----------+----------
admin_group | 6438 | my-desktop | 0.84 | 1 | 0.00 | 0.00
default_group | 6437 | my-desktop | 0.00 | 0 | 0.00 | 0.00
(2 rows)
sc_resgroup_status_per_executor¶
本视图基于每个executor实例和每个主机显示每个资源组的实时CPU和内存使用率(MB)。
权限:所有用户均可访问此视图。
列 | 描述 |
---|---|
rsgname | 资源组的名称 |
groupid | 资源组的ID |
hostname | executor主机的主机名 |
executor_id | executor ID |
cpu | 主机上的executor实例的资源组的实时CPU使用率,用百分比(占全部CPU核算力的百分比)表示。 |
memory_used | 主机上的executor实例的资源组的实时内存使用情况,单位:MB。 |
io_speed | 主机上的executor实例的资源组的实时IO速度,单位:B/s |
ic_speed | 主机上的executor实例的资源组的内部数据传输实时速度,单位:B/s |
该视图的查询输出与sc_resgroup_status_per_host视图的查询输出相似,并针对每个主机上的每个executor实例划分CPU和内存(已使用和可用)。
检查需要例行维护的表¶
以下视图可以帮助您识别需要日常维护的表 (VACUUM
和/或ANALYZE
)。
VACUUM
或VACUUM FULL
命令可回收已删除或过时的行所占用的磁盘空间。
由于Seabox数据库中使用了MVCC事务并发模型,即使任何新事务都不可见,被删除或更新的数据行仍占据磁盘上的物理空间。
过期的行会增加磁盘上的表大小,并最终减慢表的扫描速度。
ANALYZE
命令收集查询优化器所需的列级统计信息。 Seabox数据库使用依赖数据库统计信息的基于成本的查询优化器。
准确的统计信息使查询优化器可以更好地估计选择性和查询操作检索到的行数,从而选择最有效的查询计划。
sc_bloat_diag¶
此视图显示被诊断为“膨胀的”常规heap表(给定表统计信息,磁盘上的实际页面数超过了预期的页面数)。 要想获得表的膨胀信息,需要对表执行analyze命令。
注意:只有被诊断为“膨胀的”表才会被本视图显示,bdirelpages/bdiexppages
定义为膨胀率(“/”为整除运算),膨胀率大于3的表才会被判定为“膨胀的”。
如果需要查看所有表(含非“膨胀的”)的页数,可以使用sc_bloat_expected_pages
视图。
膨胀的表需要VACUUM或VACUUM FULL,才能回收已删除或过时的行所占用的磁盘空间。
权限:所有用户都可以访问该视图,但是非超级用户将只能看到他们有权访问的表。
列 | 描述 |
---|---|
bdirelid | 表oid |
bdinspname | schema名称 |
bdirelname | 表名 |
bdirelpages | 磁盘上实际页的数量 |
bdiexppages | 给定表数据的预期页数(最小值为executor实例数) |
bdidiag | 膨胀诊断消息 |
sc_bloat_expected_pages¶
此视图显示所有heap表的存储页使用值及期望值。
权限:所有用户都可以访问该视图,但是非超级用户将只能看到他们有权访问的表。
列 | 描述 |
---|---|
btdrelid | 表oid |
btdrelpages | 磁盘上实际页的数量 |
btdexppages | 给定表数据的预期页数(最小值为executor实例数) |
sc_stats_missing¶
该视图显示没有统计信息的表,因此可能需要对该表运行ANALYZE。
权限:所有用户都可以访问该视图,但是非超级用户将只能看到他们有权访问的表。
列 | 描述 |
---|---|
smischema | schema名称 |
smitable | 表名 |
smisize | 该表是否有统计信息。如果该表没有在系统表中记录行数和行大小统计信息,则为false,这可能表明该表需要进行分析。如果表不包含任何行,这也将为false。例如,分区表的父表始终为空,并且始终返回false。 |
smicols | 表中的列数 |
smirecs | 表中的行数 |
检查服务器配置文件¶
sc_param_setting(‘parameter_name’)¶
函数参数为服务器配置参数的名称,并返回Coordinator和每个活动Executor的seaboxsql.conf值。
权限:所有用户均可使用此函数。
列 | 描述 |
---|---|
paramexecutor | executor id(仅显示活动Executor)。Coordinator的id为-1。 |
paramname | 参数名称 |
paramvalue | 参数值 |
示例:
SELECT * FROM sc_toolkit.sc_param_setting('max_connections');
sc_param_settings_executor_value_diffs¶
分类为本地参数的服务器配置参数(意味着每个executor都从其自己的seaboxsql.conf文件获取参数值),应在所有executor上进行相同的设置。该视图显示的本地参数设置不一致。不包括应该具有不同值的参数(例如port)。
权限:所有用户均可访问此视图。
列 | 描述 |
---|---|
psdname | 参数的名称 |
psdvalue | 参数的值 |
psdcount | 具有此值的executor数 |
检查失败的executor¶
sc_pgdatabase_invalid¶
此视图显示系统目录中标记为宕机的executor的信息。
权限:所有用户均可访问此视图。
列 | 描述 |
---|---|
pgdbidbid | executor的dbid。每个executor都有唯一的dbid。 |
pgdbiisprimary | executor的角色是否是primary?(t或f) |
pgdbicontent | 该executor的ID。primary和mirror将具有相同的ID。 |
pgdbivalid | executor是否在线有效?(t或f) |
pgdbidefinedprimary | 在系统初始化时,此executor是否分配为primary?(t或f) |
检查SQL磁盘溢出空间使用情况¶
本节视图显示当前正在使用磁盘溢出空间的所有查询的信息。如果Seabox数据库没有足够的内存来在内存中执行查询,则会在磁盘上创建工作文件(workfile)。此信息可用于故障排除和优化查询。
sc_workfile_entries¶
该视图显示当前所有查询在所有executor上创建的workfile磁盘空间使用情况。
权限:所有用户均可访问该视图,但是非超级用户只能查看其有权访问的数据库信息。
列 | 类型 | 参考 | 描述 |
---|---|---|---|
command_cnt | integer | 查询的命令ID | |
datname | name | 数据库名称 | |
directory | text | workfile的路径 | |
executorid | integer | executor ID | |
optype | text | 创建workfile的查询算子类型 | |
pid | integer | 服务器进程PID | |
query | text | 进程正在执行的查询 | |
sess_id | integer | 会话ID | |
size | numeric | workfile的大小(单位:字节) | |
numfiles | bigint | 创建的文件数。 | |
slice | integer | 查询计划切片。查询计划中正在执行的部分。 | |
usename | name | 角色名称 |
sc_workfile_usage_per_query¶
该视图显示每条查询在每个executor上workfile的磁盘空间使用情况。
权限:所有用户均可访问该视图,但是非超级用户只能查看其有权访问的数据库信息。
列 | 类型 | 参考 | 描述 |
---|---|---|---|
command_cnt | integer | 查询的命令ID | |
executorid | integer | executor ID | |
query | text | 进程正在执行的查询 | |
datname | name | 数据库名称 | |
pid | integer | 服务器进程的PID | |
sess_id | integer | 会话ID | |
size | numeric | workfile的大小(单位:字节) | |
numfiles | bigint | 创建的文件数 | |
usename | name | 角色名称 |
sc_workfile_usage_per_executor¶
该视图为每个executor显示一行。每行显示当前时间executor上用于workfile的磁盘空间总量。
权限:所有用户均可访问此视图,但是非超级用户只能查看其有权访问的数据库信息。
列 | 类型 | 参考 | 描述 |
---|---|---|---|
executorid | integer | executor ID | |
size | numeric | executor上workfile的总大小 | |
numfiles | bigint | 创建的文件数 |
查看用户和组(角色)¶
将用户(角色)分组在一起以简化对象特权的管理通常很方便:通过这种方式,可以将特权授予或撤消整个组。在Seabox数据库中,创建一个角色代表这个组,然后将组角色的成员身份授予各个用户角色来完成的。
sc_roles_assigned¶
此视图显示系统中的所有角色及其分配的成员(如果角色也是组角色)。
权限:所有用户均可访问此视图。
列 | 描述 |
---|---|
raroleid | 角色对象ID。如果此角色具有成员(用户),则将其视为组角色。 |
rarolename | 角色(用户或组)名称。 |
ramemberid | 属于此角色成员的角色的角色对象ID。 |
ramembername | 属于此角色的角色名称。 |
sc_resgroup_role¶
此视图显示查看角色分派的资源组。
权限:所有用户均可访问此视图。
列 | 描述 |
---|---|
rrrolname | 角色名称。 |
rrrsgname | 资源组名称。 |
检查数据库对象大小和磁盘空间¶
本节视图可用于确定数据库、模式,表或索引的磁盘空间使用情况。
sc_size_of_all_table_indexes¶
此视图显示所有表的索引的总大小。
权限:所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系。
列 | 描述 |
---|---|
soatioid | 表的对象ID |
soatisize | 所有表索引的总大小(单位:字节) |
soatischemaname | schema名称 |
soatitablename | 表名 |
sc_size_of_database¶
此视图显示数据库的总大小。
权限:所有用户都可以访问该视图,但是非超级用户将只能看到他们有权访问的数据库。
列 | 描述 |
---|---|
sodddatname | 数据库名称 |
sodddatsize | 数据库大小(单位:字节) |
sc_size_of_index¶
此视图显示索引的总大小。
权限:所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系。
列 | 描述 |
---|---|
soioid | 索引的对象ID |
soitableoid | 索引所属表的对象ID |
soisize | 索引大小(单位:字节) |
soiindexschemaname | 索引schema的名称 |
soiindexname | 索引名称 |
soitableschemaname | 表schema的名称 |
soitablename | 表名称 |
sc_size_of_partition_and_indexes_disk¶
此视图显示分区子表及其索引在磁盘上的大小。
权限:所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的关系。
列 | 描述 |
---|---|
sopaidparentoid | 父表的对象ID |
sopaidpartitionoid | 分区表的对象ID |
sopaidpartitiontablesize | 分区表大小(单位:字节) |
sopaidpartitionindexessize | 该分区上所有索引的总大小 |
sopaidparentschemaname | 父schema的名称 |
sopaidparenttablename | 父表的名称 |
sopaidpartitionschemaname | 分区schema的名称 |
sopaidpartitiontablename | 分区表的名称 |
sc_size_of_schema_disk¶
此视图显示当前数据库中公共模式和用户创建的模式的模式大小。
权限:所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的架构。
列 | 描述 |
---|---|
sosdnsp | schema名称 |
sosdschematablesize | schema中表的总大小(单位:字节) |
sosdschemaidxsize | schema中索引的总大小(单位:字节) |
sc_size_of_table_and_indexes_disk¶
此视图显示表及其索引在磁盘上的大小。
权限:所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系。
列 | 描述 |
---|---|
sotaidoid | 父表的对象ID |
sotaidtablesize | 表的磁盘大小 |
sotaididxsize | 表上所有索引的总大小 |
sotaidschemaname | schema名称 |
sotaidtablename | 表名 |
sc_size_of_table_and_indexes_licensing¶
此视图显示用于许可目的的表及其索引的总大小。
权限:需要超级用户权限。
列 | 描述 |
---|---|
sotailoid | 表的对象ID |
sotailtablesizedisk | 表的总磁盘大小 |
sotailtablesizeuncompressed | 如果该表是压缩的列存表,则显示未压缩的表大小(单位:字节)。 |
sotailindexessize | 表中所有索引的总大小 |
sotailschemaname | schema名称 |
sotailtablename | 表名 |
sc_size_of_table_disk¶
此视图显示磁盘上表的大小。
权限:所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的表。
列 | 描述 |
---|---|
sotdoid | 表的对象ID |
sotdsize | 表的大小(单位:字节)。该大小仅是主表的大小。该大小不包括辅助对象(例如,超大(toast)属性)或列存表的其他存储对象。 |
sotdtoastsize | TOAST表的大小(超大属性存储)(如果有)。 |
sotdadditionalsize | 反映列存表的段和块目录表的大小。 |
sotdschemaname | schema名称 |
sotdtablename | 表名 |
sc_size_of_table_uncompressed¶
此视图显示列存表的未压缩表大小。 否则,将显示磁盘上的表大小。
权限:需要超级用户权限。
列 | 描述 |
---|---|
sotuoid | 表的对象ID |
sotusize | 如果表是压缩的列存表,则表示表的未压缩大小(单位:字节)。否则,为磁盘上表的大小。 |
sotuschemaname | schema名称 |
sotutablename | 表名 |
sc_disk_free¶
该外部表在活动executor主机上运行df(disk free)命令,并报告结果。非活动mirror不包括在计算中。
权限:需要超级用户权限。
列 | 描述 |
---|---|
dfexecutor | executor的内容ID(仅显示活动executor) |
dfhostname | executor主机的主机名 |
dfdevice | 设备名称 |
dfspace | executor文件系统中的可用磁盘空间(单位:KB) |
sc_disk_lsblk¶
该外部表在活动executor主机上运行lsblk命令,并报告结果。非活动mirror不包括在计算中。
权限:需要超级用户权限。
列 | 描述 |
---|---|
lsblkexecutor | executor的内容ID(仅显示活动executor) |
lsblkhostname | executor主机的主机名 |
lsblkname | 块设备名称 |
lsblknumber | 块设备的设备号(主设备号:次设备号) |
lsblkrm | 是否可移除 |
lsblksize | 大小,单位:字节 |
lsblkro | 是否只读 |
lsblktype | 设备类型 |
lsblkmountpoint | 挂载点 |
检查数据分布倾斜¶
Seabox数据库中的所有表都是分布式的,这意味着它们的数据被划分到系统中的所有executor中。如果数据分布不均匀,则查询处理性能可能会受到影响。
sc_skew_coefficients¶
该视图通过计算存储在每个executor上的数据的变异系数来显示数据分布倾斜程度。
权限:所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的表。
列 | 描述 |
---|---|
skcoid | 表的对象ID |
skcnamespace | 定义表的命名空间 |
skcrelname | 表名 |
skccoeff | 变异系数(CV)计算为标准偏差除以平均值。它同时考虑了平均值和围绕数据序列平均值的变异性。值越低越好。较高的值表示较大的数据偏斜。 |
skccoeff 表示变异系数(coefficient of variation, CV)值,是标准差除以均值。值越小越好(分布越均匀),值越大表示分布越倾斜。
sc_skew_idle_fractions¶
该视图通过计算表扫描期间空闲系统的百分比来显示数据分布偏差,这是处理数据偏差的指标。
权限:所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的表。
列 | 描述 |
---|---|
sifoid | 表的对象ID |
sifnamespace | 定义表的名称空间 |
sifrelname | 表名 |
siffraction | 在表扫描期间空闲的系统百分比,这表示数据分布不均匀或查询处理偏斜。例如,值0.1表示10%的倾斜,值0.5表示50%的倾斜,依此类推。 倾斜率超过10%的表应评估其分布策略。 |