使用的config配置了sys租户密码,想查询下某个oracle租户下面ddl需要使用多少磁盘,根据官网的执行命令报错,麻烦帮忙看下
额外的参数是–env不是-env
文档中给出的示例存在问题,
- 文档中的–env 写成了-env
- database_name 为额外新加的参数,为了规避不同库下同名表新加,示例中未加
应该为如下
obdiag rca run --scene=ddl_disk_full --env tenant_name=test1 --env table_name=t555 --env action_type=add_index --env index_name=k1 --env database_name=xxxx
报错是在对应的库里没有找到对应的表,要不这次我直接帮你拼接吧。
可以把 租户名、库名、表名、索引名 发出来么,图片里看不太清
obdiag rca run --scene=ddl_disk_full \
--env tenant_name={租户名} \
--env database_name={库名} \
--env table_name={表名} \
--env index_name={索引名}
[root@ob1 ~]# obdiag rca run --scene=ddl_disk_full --env tenant_name=hxdb --env table_name=KDPL_ZHMINX --env action_type=add_index --env index_name=KDPL_ZHMINX_IDX7 --env database_name=V7CORE
[ERROR] rca run Exception: rca_scene.init err: can not find database id by database name: V7CORE. Please check the table name.
Trace ID: b45e64f4-edc8-11ef-bbc2-9cc2c43bc151
If you want to view detailed obdiag logs, please run: obdiag display-trace b45e64f4-edc8-11ef-bbc2-9cc2c43bc151 还是报错
[root@ob1 ~]# obdiag display scene run --scene=observer.table_datasize --env tenant_id=1002 --env database_name=V7CORE --env table_name=KDPL_ZHMINX
display_scenes_run start …
execute tasks: observer.table_datasize
±----------±------------±--------------±------------±---------±---------------+
| TENANT_ID | tenant_name | DATABASE_NAME | TABLE_NAME | TABLE_ID | data_size_in_B |
±----------±------------±--------------±------------±---------±---------------+
| 1002 | hxdb | V7CORE | KDPL_ZHMINX | 943165 | 73037746440 |
±----------±------------±--------------±------------±---------±---------------+
Trace ID: 791c8b5e-edc9-11ef-a39f-9cc2c43bc151
If you want to view detailed obdiag logs, please run: obdiag display-trace 791c8b5e-edc9-11ef-a39f-9cc2c43bc151
查询这张表大小可以,但是查询ddl不行
obdiag设计时主要面向了开源版本mysq租户,可能是这块的兼容存在问题,可以在rca指令后加上 -v 来打印详细的日志,看下是哪里存在问题么?
[root@ob1 ~]# obdiag rca run --scene=ddl_disk_full --env tenant_name=hxdb --env table_name=KDPL_ZHMINX --env action_type=add_index --env index_name=KDPL_ZHMINX_IDX7 --env database_name=V7CORE -v
- cmd: obdiag rca run
- opts: {‘inner_config’: None, ‘scene’: ‘ddl_disk_full’, ‘store_dir’: ‘./obdiag_rca/’, ‘env’: None, ‘report_type’: ‘table’, ‘c’: ‘/root/.obdiag/config.yml’, ‘config’: None}
- mkdir /usr/local/oceanbase-diagnostic-tool/conf/inner_config.yml
- mkdir /root/.obdiag/config.yml
- connect databse …
- RCAHandler.init store dir: ./obdiag_rca/
- rca result save_path is :./obdiag_rca/
- get observer version, by sql
- start get_observer_version_by_sql . input: 10.25.129.75:2881
- connect databse …
- get_observer_version_by_sql ob_version_info is (‘5.7.25-OceanBase-v4.2.1.7’,)
- RCAHandler.init get observer version: 4.2.1.7
- RCAHandler.init get observer version: 4.2.1.7
- Execute Shell command on server 10.25.129.226:/opt/taobao/install/obproxy-4.2.1.0/bin/obproxy --version
- get obproxy version, run cmd = [/opt/taobao/install/obproxy-4.2.1.0/bin/obproxy --version]
- RCAHandler.init get obproxy version: 4.2.1.0
- RCAHandler init.cluster:obcluster, init.nodes:[{‘ip’: ‘10.25.129.226’, ‘ssh_username’: ‘root’, ‘ssh_port’: ‘22’, ‘home_path’: ‘/home/admin/oceanbase’, ‘data_dir’: ‘/home/admin/oceanbase/store’, ‘redo_dir’: ‘/home/admin/oceanbase/store’, ‘ssh_key_file’: ‘’, ‘ssh_type’: ‘remote’, ‘container_name’: ‘’, ‘namespace’: ‘’, ‘pod_name’: ‘’, ‘kubernetes_config_file’: ‘’, ‘host_type’: ‘OBSERVER’, ‘ssher’: <src.common.ssh_client.ssh.SshClient object at 0x7f0c8e8f2340>}, {‘ip’: ‘10.25.129.75’, ‘ssh_username’: ‘root’, ‘ssh_port’: ‘22’, ‘home_path’: ‘/home/admin/oceanbase’, ‘data_dir’: ‘/home/admin/oceanbase/store’, ‘redo_dir’: ‘/home/admin/oceanbase/store’, ‘ssh_key_file’: ‘’, ‘ssh_type’: ‘remote’, ‘container_name’: ‘’, ‘namespace’: ‘’, ‘pod_name’: ‘’, ‘kubernetes_config_file’: ‘’, ‘host_type’: ‘OBSERVER’, ‘ssher’: <src.common.ssh_client.ssh.SshClient object at 0x7f0c8e8e83a0>}, {‘ip’: ‘10.25.129.76’, ‘ssh_username’: ‘root’, ‘ssh_port’: ‘22’, ‘home_path’: ‘/home/admin/oceanbase’, ‘data_dir’: ‘/home/admin/oceanbase/store’, ‘redo_dir’: ‘/home/admin/oceanbase/store’, ‘ssh_key_file’: ‘’, ‘ssh_type’: ‘remote’, ‘container_name’: ‘’, ‘namespace’: ‘’, ‘pod_name’: ‘’, ‘kubernetes_config_file’: ‘’, ‘host_type’: ‘OBSERVER’, ‘ssher’: <src.common.ssh_client.ssh.SshClient object at 0x7f0c8e8e8a90>}], init.obproxy_nodes:[{‘ip’: ‘10.25.129.226’, ‘ssh_username’: ‘root’, ‘ssh_port’: ‘22’, ‘home_path’: ‘/opt/taobao/install/obproxy-4.2.1.0’, ‘ssh_key_file’: ‘’, ‘ssh_type’: ‘remote’, ‘container_name’: None, ‘namespace’: ‘’, ‘pod_name’: ‘’, ‘kubernetes_config_file’: ‘’, ‘host_type’: ‘OBPROXY’, ‘ssher’: <src.common.ssh_client.ssh.SshClient object at 0x7f0c8e8e8970>}, {‘ip’: ‘10.25.129.75’, ‘ssh_username’: ‘root’, ‘ssh_port’: ‘22’, ‘home_path’: ‘/opt/taobao/install/obproxy-4.2.1.0’, ‘ssh_key_file’: ‘’, ‘ssh_type’: ‘remote’, ‘container_name’: None, ‘namespace’: ‘’, ‘pod_name’: ‘’, ‘kubernetes_config_file’: ‘’, ‘host_type’: ‘OBPROXY’, ‘ssher’: <src.common.ssh_client.ssh.SshClient object at 0x7f0c8d43f9a0>}, {‘ip’: ‘10.25.129.76’, ‘ssh_username’: ‘root’, ‘ssh_port’: ‘22’, ‘home_path’: ‘/opt/taobao/install/obproxy-4.2.1.0’, ‘ssh_key_file’: ‘’, ‘ssh_type’: ‘remote’, ‘container_name’: None, ‘namespace’: ‘’, ‘pod_name’: ‘’, ‘kubernetes_config_file’: ‘’, ‘host_type’: ‘OBPROXY’, ‘ssher’: <src.common.ssh_client.ssh.SshClient object at 0x7f0c8d43f4f0>}], init.store_dir:./obdiag_rca/
- ddl_disk_full store_dir:./obdiag_rca/obdiag_ddl_disk_full_20250218153414
- get observer version, by sql
- start get_observer_version_by_sql . input: 10.25.129.75:2881
- connect databse …
- get_observer_version_by_sql ob_version_info is (‘5.7.25-OceanBase-v4.2.1.7’,)
- [DDlDiskFullScene] observer version is 4.2.1.7.
- [DDlDiskFullScene] action type is add_index.
- [DDlDiskFullScene] index name is KDPL_ZHMINX_IDX7.
- [DDlDiskFullScene] tenant_id is 1002
[ERROR] rca run Exception: rca_scene.init err: can not find database id by database name: V7CORE. Please check the table name. - Traceback (most recent call last):
File “src/handler/rca/rca_handler.py”, line 173, in handle
File “/root/.obdiag/rca/ddl_disk_full.py”, line 94, in init
raise RCAInitException(“can not find database id by database name: {0}. Please check the table name.”.format(database_name))
src.handler.rca.rca_exception.RCAInitException: can not find database id by database name: V7CORE. Please check the table name.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “src/common/core.py”, line 518, in rca_run
File “src/handler/rca/rca_handler.py”, line 176, in handle
Exception: rca_scene.init err: can not find database id by database name: V7CORE. Please check the table name.
Trace ID: c03cc57a-edca-11ef-b924-9cc2c43bc151
If you want to view detailed obdiag logs, please run: obdiag display-trace c03cc57a-edca-11ef-b924-9cc2c43bc151
看起来是弄巧成拙了,特意加了一个database的防御,但是没有用上,反而使oracle租户无法实现根因分析
可以先使用 obdiag analyze index_space 指令实现空间所需分析,然后再对照目前节点剩余的空间分析哪台节点需要扩容
$ obdiag analyze index_space --tenant_name=hxdb --table_name=KDPL_ZHMINX --column_names={所涉及到的列名}
使用文档
https://www.oceanbase.com/docs/common-obdiag-cn-1000000002200473
这个查询出来的estimated_index不是膨胀的5.5倍的值把
1、这是通过obdiag查看表的大小
[2025-02-18 15:25:04.830] [DEBUG] - StepSQLHandler execute: SELECT /*+ query_timeout(30000000) */ a.TENANT_ID, c.tenant_name, a.DATABASE_NAME, a.TABLE_NAME, a.TABLE_ID, SUM(CASE WHEN b.nested_offset = 0 THEN IFNULL(b.data_block_count + b.index_block_count + b.linked_block_count, 0) * 2 * 1024 * 1024 ELSE IFNULL(b.size, 0) END ) AS data_size_in_B FROM oceanbase.CDB_OB_TABLE_LOCATIONS a INNER JOIN oceanbase.__all_virtual_table_mgr b ON a.svr_ip = b.svr_ip AND a.svr_port = b.svr_port AND a.tenant_id = b.tenant_id AND a.LS_ID = b.LS_ID AND a.TABLET_ID = b.TABLET_ID inner join oceanbase.all_tenant c on a.tenant_id=c.tenant_id WHERE a.role = ‘LEADER’ AND c.tenant_id = 1002 AND b.table_type >= 10 AND b.size > 0 AND a.TABLE_NAME NOT REGEXP '^’ and a.database_name=‘V7CORE’ and a.TABLE_NAME=‘KDPL_ZHMINX’ GROUP BY a.TABLE_ID;
[2025-02-18 15:25:25.818] [INFO] ±----------±------------±--------------±------------±---------±---------------+
[2025-02-18 15:25:25.818] [INFO] | TENANT_ID | tenant_name | DATABASE_NAME | TABLE_NAME | TABLE_ID | data_size_in_B |
[2025-02-18 15:25:25.818] [INFO] ±----------±------------±--------------±------------±---------±---------------+
[2025-02-18 15:25:25.818] [INFO] | 1002 | hxdb | V7CORE | KDPL_ZHMINX | 943165 | 73037746440 |
[2025-02-18 15:25:25.818] [INFO] ±----------±------------±--------------±------------±---------±---------------+
2、这是通过你之前博客里面发的sql查询的表大小
obclient [oceanbase]> select svr_ip, svr_port, sum(original_size) as estimated_data_size from __all_virtual_tablet_sstable_macro_info where tablet_id in (select tablet_id from __all_virtual_tablet_to_table_history where table_id = 943165) and (svr_ip, svr_port) in (select svr_ip, svr_port from __all_virtual_ls_meta_table where role = 1) group by svr_ip, svr_port;
±--------------±---------±--------------------+
| svr_ip | svr_port | estimated_data_size |
±--------------±---------±--------------------+
| 10.25.129.75 | 2882 | 573357105915 |
| 10.25.129.226 | 2882 | 573357107798 |
| 10.25.129.76 | 2882 | 573357099981 |
±--------------±---------±--------------------+
3 rows in set (35.013 sec)
想问下这两种查询结果有什么区别吗
从上述执行时获取到的日志,分析获得你的集群版本是4.2.1.7,在这个版本上是5.5倍的膨胀
-
第一个 SQL:
- 目标是统计表的数据大小(以字节为单位),基于
CDB_OB_TABLE_LOCATIONS
和__all_virtual_table_mgr
表。 - 主要关注的是表的存储块计数(如
data_block_count
、index_block_count
等)或直接使用size
字段来计算数据大小。
- 目标是统计表的数据大小(以字节为单位),基于
-
第二个 SQL:
- 目标是估算索引创建过程中使用的临时空间大小,基于
__all_virtual_tablet_sstable_macro_info
和__all_virtual_ls_meta_table
表。 - 主要关注的是主表的原始数据量(
original_size
),并结合 Leader 分布信息进行汇总。 - 另外,由于依赖__all_virtual_tablet_sstable_macro_info 来进行查询,所以只确定sstable里的数据,这和上次合并存在关联,若上次合并后数据量不大,但后续存在大量变更且未及时合并,可能存在计算上的误差,建议创建索引前进行一次合并(但是实际生产中根据经验影响大不),使计算数据更加准确。
- 目标是估算索引创建过程中使用的临时空间大小,基于
关于oracle租户database_name字段的兼容方式,obdiag3.2.0将会进行对应优化,商业版用户也可以联系运维sa获取支持帮助
那如果要自己手动计算创建索引膨胀的大小,就按照第二个sql计算是吧,主要是这两个值查的有点多,想确认下
是的,建索引的时候查出来的数据占用量是未压缩的数据(原数据),而使用observer.table_datasize这个查出来的值是压缩后的,两者存在区别是正常的。