# db_cnt_tool **Repository Path**: zhanghyishere/db_cnt_tool ## Basic Information - **Project Name**: db_cnt_tool - **Description**: 用来集中统计多数据源数据量,实现汇总监测 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-13 - **Last Updated**: 2026-02-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 数据库管理工具使用文档 ## 项目介绍 该工具是一个基于Spring Boot 2.7.18的数据库管理工具,主要用于管理数据库连接信息、自动扫描表结构、执行ANALYZE操作并更新数据量统计。该工具支持多种数据库类型(HighGo、PostgreSQL、Hive),并提供了灵活的筛选功能,可以按ID范围批量处理数据库连接。 ## 功能特性 1. **数据库表初始化**:自动创建主表和子表结构,已存在则跳过 2. **数据库连接管理**:支持从JSON文件批量导入数据库连接信息 3. **自动表扫描**:根据连接信息自动扫描用户可查询的表结构,支持按ID筛选、表前缀过滤和数量限制 4. **ANALYZE执行**:根据用户权限执行ANALYZE操作(DBA整库执行,非DBA按表执行) 5. **数据量统计**:执行ANALYZE后自动更新表数据量统计 6. **多数据库支持**:支持HighGo、PostgreSQL和Hive数据库 7. **灵活筛选**:支持按ID筛选连接,支持跳过ANALYZE执行,支持限制处理数量 8. **批量处理**:支持按ID范围批量扫描和执行ANALYZE操作 9. **Schema过滤**:HighGo和PostgreSQL支持schema字段过滤,可指定扫描特定schema或全部schema 10. **数量限制**:支持limit参数限制处理的连接数量,按ID增序排列 ## 技术栈 - Spring Boot 2.7.18 - JDK 8 - Spring Data JPA - PostgreSQL驱动 - HighGo JDBC驱动 - Hive JDBC驱动 - Jackson JSON处理 ## 数据库表结构 ### 主表(db_connection) | 字段名 | 类型 | 描述 | | ----------- | ------------- | ---------------------------------------------------------- | | id | BIGINT | 主键ID | | auth_type | INTEGER | 认证方式(1-密码 2-票据) | | username | VARCHAR | 账号 | | password | VARCHAR | 密码或票据 | | ip | VARCHAR | 数据库IP地址 | | port | INTEGER | 数据库端口 | | db_type | INTEGER | 数据库类型(1-highgo 2-posgres 3-hive) | | database | VARCHAR | 数据库名称 | | schema | VARCHAR | Schema名称(HighGo和PostgreSQL专用,为空则扫描所有schema) | | description | VARCHAR | 数据库描述信息 | | disk_usage | DECIMAL(10,3) | 磁盘使用情况(单位:MB,保留3位小数) | | is_dba | BOOLEAN | 是否DBA权限 | | total_data | BIGINT | 数据总量 | ### 子表(db_table) | 字段名 | 类型 | 描述 | | ------------- | ------------- | ------------------------------------- | | id | BIGINT | 主键ID | | connection_id | BIGINT | 主表ID(外键) | | table_name | VARCHAR | 表名 | | schema_name | VARCHAR | 模式名 | | data_count | BIGINT | 数据量 | | disk_usage | DECIMAL(10,3) | 磁盘使用情况(单位:MB,保留3位小数) | | is_display | BOOLEAN | 是否显示 | ## 安装与配置 ### 前置条件 - JDK 8或更高版本 - Maven 3.6或更高版本 - PostgreSQL数据库(用于存储连接信息) ### 配置文件 修改 `src/main/resources/application.yml` 文件,配置存储连接信息的数据库: ```yaml # 数据库配置 spring: datasource: url: jdbc:postgresql://localhost:5432/postgres username: postgres password: postgres driver-class-name: org.postgresql.Driver jpa: hibernate: ddl-auto: none show-sql: false properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect ``` #### 开发环境配置 对于开发环境,可以修改 `src/main/resources/application-dev.yml` 文件,覆盖通用配置: ```yaml # 开发环境数据库配置 spring: datasource: url: jdbc:postgresql://localhost:5432/postgres_dev username: dev_user password: dev_password ``` ### 构建项目 ```bash mvn clean package -DskipTests ``` 构建完成后,可执行jar文件会生成在 `target` 目录中。 ## 使用方法 ### 1. 初始化数据库表结构 ```bash java -jar db-data-cnt-1.0.0-SNAPSHOT.jar init ``` 该命令会: - 检查主表(db_connection)是否存在 - 不存在则创建,存在则跳过 - 检查子表(db_table)是否存在 - 不存在则创建,存在则跳过 - 输出初始化结果信息 **使用场景:** - 首次部署时创建数据库表结构 - 升级后确保表结构存在 ### 2. 导入数据库连接信息 创建JSON文件(例如 `connections.json`),格式如下: ```json [ { "authType": 1, "username": "test_user1", "password": "test_pass1", "ip": "127.0.0.1", "port": 5432, "dbType": 2, "database": "your_database_name", "schema": "public", "description": "测试数据库连接1", "isDba": false }, { "authType": 2, "username": "hive/host4.domain@DFS.COM", "password": "/etc/security/keytabs/hive.service.keytab", "ip": "host1.domain:2181,host2.domain:2181,host3.domain:2181", "port": 10000, "dbType": 3, "database": "default", "isDba": false }, { "authType": 1, "username": "gasoline", "password": "", "ip": "", "port": 5888, "dbType": 1, "database": "gasoline", "schema": "", "description": "", "isDba": false } ] ``` 执行导入命令: ```bash java -jar db-data-cnt-1.0.0-SNAPSHOT.jar import connections.json ``` **字段说明:** - `authType`: 认证方式,1表示密码认证,2表示票据认证(Kerberos) - `dbType`: 数据库类型,1表示HighGo,2表示PostgreSQL,3表示Hive - `schema`: Schema名称(仅HighGo和PostgreSQL有效) - 如果不填写或为空字符串,则扫描该数据库中的所有schema - 如果填写了具体的schema名称(如"public"),则只扫描指定的schema - `description`: 数据库描述信息,用于备注和说明 - `diskUsage`: 磁盘使用情况(单位:MB,保留3位小数),用于统计数据库和表的磁盘占用 - `isDisplay`: 是否显示该表(true=显示,false=隐藏) - `isDba`: 是否具有DBA权限,影响ANALYZE执行方式 **使用场景:** - 批量导入多个数据库连接配置 - 迁移连接配置信息 - 初始化测试环境 ### 3. 扫描填充子表 scan命令用于扫描数据库连接中的表结构,并将表信息保存到子表中。支持按ID筛选、schema过滤和表前缀过滤。 #### 参数详解 **--id `` ``** 按ID筛选需要扫描的数据库连接,支持以下操作符: | 操作符 | 全称 | 说明 | 示例 | | ------ | ---------------- | -------- | --------- | | eq | equals | 等于 | --id eq 1 | | ge | greater or equal | 大于等于 | --id ge 2 | | gt | greater | 大于 | --id gt 1 | | lt | less | 小于 | --id lt 5 | | le | less or equal | 小于等于 | --id le 3 | **[table-prefix]** 可选的表前缀过滤器,只扫描以指定前缀开头的表。 **limit ``** 可选的连接数量限制,只处理前 n 个符合条件的连接(按ID增序排列)。 **注意**:参数顺序为 `--id [limit ] [table-prefix]`,limit 参数需在 table-prefix 参数之前。 **schema字段说明(仅HighGo和PostgreSQL):** - 如果schema字段为空或不填写:扫描数据库中的所有schema - 如果schema字段填写了具体值:只扫描指定的schema #### 使用场景和示例 **场景1:扫描单个数据库连接的所有schema** ```bash # 扫描ID为1的数据库连接中的所有schema的所有表 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id eq 1 ``` **场景2:扫描指定schema的表** ```bash # 扫描ID为1的数据库连接中,public schema的所有表 # 需要在connections.json中设置"schema": "public" java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id eq 1 ``` **场景3:扫描指定前缀的表** ```bash # 扫描ID为1的数据库连接中,以"test_"开头的表 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id eq 1 test_ ``` **场景4:批量扫描多个数据库连接** ```bash # 扫描ID大于等于2的所有数据库连接 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id ge 2 # 扫描ID小于5的所有数据库连接 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id lt 5 ``` **场景5:扫描特定ID范围的连接** ```bash # 扫描ID在1到3之间的连接(使用组合条件) # 先扫描ID大于等于1的连接 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id ge 1 # 再扫描ID小于等于3的连接 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id le 3 ``` **场景6:批量扫描并指定表前缀** ```bash # 扫描ID大于等于2的连接,只扫描以"prod_"开头的表 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id ge 2 limit 10 prod_ # 扫描ID小于等于5的连接,只扫描以"test_"开头的表 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id le 5 limit 10 test_ ``` **场景7:增量扫描** ```bash # 假设之前已经扫描了ID 1-5的连接 # 现在只需要扫描新增的连接(ID大于5) java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id gt 5 ``` **场景8:限制扫描数量** ```bash # 扫描ID大于等于1的连接,但只处理前10个(按ID增序排列) java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id ge 1 limit 10 # 扫描ID为1的连接,只处理前5个(如果有多个ID为1的连接) java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id eq 1 limit 5 # 扫描ID大于等于2的连接,只扫描以"prod_"开头的表,且只处理前3个连接 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id ge 2 limit 3 prod_ ``` #### 输出说明 执行scan命令后,会输出以下信息: - 找到的连接数量 - 每个连接扫描的表数量 - 总共扫描的表数量 示例输出: ``` Found 3 connection(s) to scan Scanned 150 tables for connection 1 Scanned 200 tables for connection 2 Scanned 180 tables for connection 3 Total scanned 530 tables across 3 connection(s) ``` ### 4. 执行ANALYZE并更新数据量 analyze命令用于执行数据库ANALYZE操作,并更新表的数据量统计信息。支持按ID筛选和跳过ANALYZE执行。 #### 参数详解 **--id `` ``** 按ID筛选需要执行ANALYZE的数据库连接,操作符与scan命令相同。 **--skip-analyze** 跳过ANALYZE执行,只更新数据量统计。适用于已经执行过ANALYZE,只需要更新统计信息的场景。 **limit ``** 可选的连接数量限制,只处理前 n 个符合条件的连接(按ID增序排列)。 **注意**:参数顺序为 `--id [limit ] [--skip-analyze]`,limit 参数需在 --skip-analyze 参数之前。 #### 使用场景和示例 **场景1:对所有连接执行ANALYZE** ```bash # 对所有数据库连接执行ANALYZE操作 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze ``` **场景2:对单个连接执行ANALYZE** ```bash # 只对ID为1的连接执行ANALYZE java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --id eq 1 ``` **场景3:批量执行ANALYZE** ```bash # 对ID大于等于2的所有连接执行ANALYZE java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --id ge 2 # 对ID小于等于5的所有连接执行ANALYZE java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --id lt 5 ``` **场景4:只更新统计信息,不执行ANALYZE** ```bash # 跳过ANALYZE执行,只更新数据量统计 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --skip-analyze ``` **场景5:批量更新统计信息** ```bash # 对ID大于等于2的连接,只更新统计信息 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --id ge 2 limit 10 --skip-analyze ``` **场景6:定时任务场景** ```bash # 定期执行ANALYZE(如每天凌晨) # 1. 先执行ANALYZE java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --id ge 1 # 2. 频繁更新统计信息(如每小时) java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --id ge 1 --skip-analyze ``` **场景7:限制处理数量** ```bash # 对ID大于等于1的连接执行ANALYZE,但只处理前10个(按ID增序排列) java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --id ge 1 limit 10 # 对ID为1的连接执行ANALYZE,只处理前5个(如果有多个ID为1的连接) java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --id eq 1 limit 5 # 对ID大于等于2的连接跳过ANALYZE,只更新统计信息,且只处理前3个连接 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --id ge 2 limit 3 --skip-analyze ``` #### DBA与非DBA用户的区别 **DBA用户(isDba=true):** - 执行整库ANALYZE命令 - 示例:`ANALYZE database_name;` - 适用于具有数据库管理员权限的用户 **非DBA用户(isDba=false):** - 按表逐个执行ANALYZE命令 - 示例:`ANALYZE table_name;` - 适用于普通用户,只能对自己有权限的表执行ANALYZE #### 输出说明 执行analyze命令后,会输出以下信息: - 处理的连接数量 - 每个连接的ANALYZE执行结果 - 更新的数据量统计信息 示例输出: ``` Processing connection 1 (PostgreSQL) Executing ANALYZE on database: test_db ANALYZE completed successfully Updated data counts for 150 tables Processing connection 2 (PostgreSQL) Executing ANALYZE on database: prod_db ANALYZE completed successfully Updated data counts for 200 tables Total processed 2 connections, updated 350 tables ``` ## 命令行帮助 执行不带参数的命令可查看帮助信息: ```bash java -jar db-data-cnt-1.0.0-SNAPSHOT.jar ``` 输出: ``` Usage: init - Initialize database tables import - Import database connections from JSON file scan --id [limit ] [table-prefix] - Scan tables for connections Operators: eq (equals), ge (greater or equal), gt (greater), lt (less), le (less or equal) limit : Limit the number of connections to process (sorted by ID ascending) analyze [options] - Execute ANALYZE and update data counts Options: --id - Filter connections by ID Operators: eq (equals), ge (greater or equal), gt (greater), lt (less), le (less or equal) limit - Limit the number of connections to process (sorted by ID ascending) --skip-analyze - Skip ANALYZE execution, only update data counts ``` ## 最佳实践 ### 1. 数据库连接管理 - 按环境分类:开发、测试、生产环境的连接使用不同的ID范围 - 定期备份:定期导出connections.json作为备份 - 权限控制:合理设置isDba字段,避免权限滥用 - 描述信息:使用desc字段添加连接描述,便于管理和识别 ### 2. 表扫描策略 - 初次扫描:使用scan命令扫描所有表 - Schema过滤:对于HighGo和PostgreSQL,使用schema字段指定扫描范围 - 不填写schema:扫描所有schema(适合全面扫描) - 填写具体schema:只扫描指定schema(适合快速扫描特定schema) - 增量扫描:使用--id gt参数只扫描新增的连接 - 前缀过滤:使用table-prefix参数过滤不需要的表 ### 3. ANALYZE执行策略 - 定期执行:建议每天或每周执行一次ANALYZE - 业务低峰期:在业务低峰期执行,避免影响性能 - 分批处理:对于大量连接,使用--id参数分批处理 ### 4. 数据量统计更新 - 频繁更新:使用--skip-analyze参数频繁更新统计信息 - 定期ANALYZE:定期执行完整的ANALYZE操作 - 监控变化:关注数据量的变化趋势 ### 5. 错误处理 - 检查日志:执行命令时关注控制台输出 - 部分失败:批量操作时,部分失败不影响其他连接 - 重试机制:对于失败的连接,可以单独重试 ## 注意事项 1. **数据库连接**:确保存储连接信息的数据库(application.properties配置)可正常连接 2. **权限要求**:执行ANALYZE操作需要相应的数据库权限 3. **网络连接**:扫描表结构和执行ANALYZE操作需要网络连接到目标数据库 4. **性能考虑**:对于大型数据库,执行ANALYZE操作可能会消耗较多资源,建议在业务低峰期执行 5. **数据库名称**:对于HighGo和PostgreSQL,需要指定database字段;对于Hive,默认使用default 6. **筛选条件**:使用--id参数可以灵活筛选需要处理的连接,提高效率 7. **表前缀**:table-prefix参数只扫描以指定前缀开头的表,可以减少扫描时间 8. **Schema过滤**:HighGo和PostgreSQL支持schema字段,Hive不支持schema字段 9. **批量操作**:批量操作时,如果某个连接失败,不会影响其他连接的处理 10. **字段说明**:desc和schema字段为可选字段,可以根据需要填写 ## 故障排除 ### 常见错误 1. **连接被拒绝** - 检查目标数据库IP、端口是否正确 - 检查是否允许远程连接 - 检查防火墙设置 2. **权限不足** - 检查数据库用户权限是否足够执行相应操作 - 确认isDba字段设置是否正确 - 对于非DBA用户,确保对表有ANALYZE权限 3. **JSON格式错误** - 确保导入的JSON文件格式正确 - 检查字段名与实体类属性是否一致 - 使用JSON验证工具验证格式 4. **驱动类未找到** - 确保相应的JDBC驱动在classpath中 - 检查pom.xml中的依赖配置 - 确认驱动版本与数据库版本兼容 5. **参数错误** - 确保使用正确的操作符(eq、ge、gt、lt、le) - 检查参数格式是否正确 - 查看命令行帮助信息 6. **表扫描失败** - 检查数据库连接是否正常 - 确认用户是否有查询表的权限 - 检查表前缀是否正确 - 检查schema字段是否正确(HighGo和PostgreSQL) 7. **ANALYZE执行失败** - 检查用户是否有ANALYZE权限 - 确认数据库是否支持ANALYZE操作 - 检查数据库连接是否稳定 8. **Kerberos认证失败** - 检查keytab文件路径是否正确 - 检查principal格式是否正确 - 检查kinit是否成功执行 - 检查网络连接是否正常 ### 日志输出 执行命令时,工具会在控制台输出详细的操作日志,可根据日志信息排查问题: ``` [INFO] Starting scan operation... [INFO] Found 3 connection(s) to scan [INFO] Connecting to database: 127.0.0.1:5432 [INFO] Scanning tables with prefix: test_ [INFO] Scanned 150 tables for connection 1 [ERROR] Error scanning connection 2: Connection refused [INFO] Scanned 180 tables for connection 3 [INFO] Total scanned 330 tables across 2 connection(s) ``` ### 性能优化建议 1. **减少扫描范围**:使用table-prefix参数减少需要扫描的表数量 2. **Schema过滤**:使用schema字段只扫描需要的schema,减少扫描时间 3. **分批处理**:对于大量连接,使用--id参数分批处理 4. **异步执行**:在后台执行耗时操作 5. **缓存结果**:对于不常变化的表结构,可以缓存扫描结果 6. **连接池**:配置合适的数据库连接池大小 ## 常见问题 ### Q1: 如何查看当前有哪些数据库连接? A: 可以直接查询db_connection表: ```sql SELECT * FROM db_connection ORDER BY id; ``` ### Q2: 如何删除某个连接的表信息? A: 可以直接删除db_table表中对应的数据: ```sql DELETE FROM db_table WHERE connection_id = 1; ``` ### Q3: scan和analyze命令可以同时执行吗? A: 不可以,需要先执行scan命令扫描表结构,然后执行analyze命令执行ANALYZE和更新数据量。 ### Q4: 如何只更新数据量,不执行ANALYZE? A: 使用--skip-analyze参数: ```bash java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --skip-analyze ``` ### Q5: 如何处理连接失败的情况? A: 工具会跳过失败的连接,继续处理其他连接。可以单独对失败的连接重试: ```bash java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id eq 1 ``` ### Q6: 支持哪些数据库类型? A: 目前支持HighGo(dbType=1)、PostgreSQL(dbType=2)和Hive(dbType=3)。 ### Q7: 如何配置Kerberos认证的Hive连接? A: 在connections.json中设置authType=2,password字段填写keytab文件路径: ```json { "authType": 2, "username": "hive/host4.domain@DFS.COM", "password": "/etc/security/keytabs/hive.service.keytab", "ip": "host4.domain", "port": 10000, "dbType": 3, "database": "default", "description": "Hive数据仓库", "isDba": false } ``` ### Q8: 如何批量处理大量连接? A: 使用--id参数分批处理: ```bash # 处理ID 1-100 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id ge 1 --id le 100 # 处理ID 101-200 java -jar db-data-cnt-1.0.0-SNAPSHOT.jar scan --id ge 101 --id le 200 ``` ### Q9: 如何监控数据量变化? A: 定期执行analyze命令,并记录输出结果。可以编写脚本定期执行并记录日志: ```bash #!/bin/bash while true; do java -jar db-data-cnt-1.0.0-SNAPSHOT.jar analyze --skip-analyze >> analyze.log sleep 3600 done ``` ### Q10: 如何优化ANALYZE执行性能? A: - 在业务低峰期执行 - 使用--id参数分批处理 - 对于大型表,可以考虑单独处理 - 调整数据库的ANALYZE相关参数 ### Q11: schema字段如何使用? A: schema字段仅对HighGo和PostgreSQL有效: - 不填写或为空字符串:扫描数据库中的所有schema - 填写具体值(如"public"):只扫描指定的schema - Hive数据库不支持schema字段,会自动扫描所有database 示例: ```json // 扫描所有schema { "dbType": 2, "database": "test_db", "schema": "" } // 只扫描public schema { "dbType": 2, "database": "test_db", "schema": "public" } ``` ### Q12: description字段有什么作用? A: description字段用于添加数据库连接的描述信息,便于: - 区分不同环境的连接(开发、测试、生产) - 添加连接用途说明 - 记录连接的备注信息 - 便于管理和维护 ### Q13: disk_usage字段有什么作用? A: disk_usage字段用于统计数据库和表的磁盘使用情况: - 单位:MB(兆字节) - 精度:保留3位小数 - 数据类型:DECIMAL(10,3) - 主表的disk_usage:统计整个数据库的磁盘使用情况 - 子表的disk_usage:统计单个表的磁盘使用情况 ### Q14: is_display字段有什么作用? A: is_display字段用于控制表的显示/隐藏: - true:显示该表(默认值) - false:隐藏该表 - 可以用于过滤不需要显示的表(如系统表、临时表等) - 在前端展示或报表生成时使用 ## 更新日志 ### v1.0.0 - 初始版本发布 - 支持HighGo、PostgreSQL、Hive数据库 - 支持批量导入连接配置 - 支持表扫描和ANALYZE执行 - 支持按ID筛选和表前缀过滤 - 添加description字段,支持数据库描述信息 - 添加schema字段,支持HighGo和PostgreSQL的schema过滤 - 优化Hive连接,移除ZooKeeper服务发现模式 - 支持Kerberos认证配置 - 添加disk_usage字段,支持磁盘使用情况统计(单位:MB,保留3位小数) - 添加is_display字段,支持表的显示/隐藏控制 - 更新数据库表结构,支持磁盘使用情况跟踪 ### v2.0.0 - 移除web服务相关代码,改为纯命令行工具 - 移除API文档(Knife4j)相关配置和依赖 - 优化项目结构,移除不必要的web相关组件 - 保留核心业务逻辑,确保命令行功能正常运行 ## 更新日志 ### v2.0.3 - 调整命令行参数顺序: - scan 命令参数顺序调整为:`scan --id [limit ] [table-prefix]` - analyze 命令参数顺序调整为:`analyze --id [limit ] [--skip-analyze]` - limit 参数位置调整到 --skip-analyze 和 table-prefix 参数之前 - 更新所有文档中的示例,确保参数顺序一致 - 保持参数解析逻辑的健壮性,不依赖参数顺序 ### v2.0.2 - 新增limit参数支持: - scan命令支持limit参数,限制扫描的连接数量 - analyze命令支持limit参数,限制执行ANALYZE的连接数量 - 查询结果按ID增序排列后,取前N条记录 - 支持与--id参数组合使用,先筛选再限制数量 - 支持与table-prefix参数组合使用 - 支持与--skip-analyze参数组合使用 - 优化数据库连接查询: - 新增findAllByOrderByIdAsc()方法,确保查询结果按ID增序排列 - 更新使用文档,添加limit参数的使用说明和示例 ### v2.0.1 - 修正 analyze命令参数解析逻辑以支持--id后跟操作符和值的格式 - 添加Schema过滤功能:HighGo和PostgreSQL支持按schema字段过滤查询范围 - 解决表名大小写问题: - 使用quote_ident()函数处理PostgreSQL/HighGo表名大小写敏感问题 - 数据量统计使用小写匹配,确保与pg_stat_user_tables视图一致 - 优化磁盘使用量查询: - 改为逐个查询表磁盘使用量,避免批量查询因单个表失败而中断 - 添加表不存在异常处理,失败不影响其他表 - 自动清理不存在的表记录: - 执行analyze时自动检测并删除db_table中不存在的表记录 - 支持从dataCounts和磁盘查询两个维度检测表是否存在 - 增强错误处理: - ANALYZE执行时捕获权限错误并跳过,不影响其他表的处理 - 记录详细的警告日志,便于排查问题 ## 技术支持 如有问题或建议,请联系技术支持团队或提交Issue。