ITPub博客

首页 > 数据库 > 国内数据库 > 【YashanDB 知识库】如何从内存中获取 SQL 语句的执行计划

【YashanDB 知识库】如何从内存中获取 SQL 语句的执行计划

原创 国内数据库 作者:崖山数据库系统YashanDB 时间:2025-02-12 18:14:47 0 删除 编辑

本文内容来自 YashanDB 官网,原文内容请见  https:///newsinfo/7664896.html?templateId=1718516

简介

目前从 PostgreSQL 迁移到 YashanDB 后,需要进行数据校验。下面给出 user1 模式从 PostgreSQL 迁移到 YashanDB 进行数据行数比对的示例。

详情

获取 PostgreSQL 精确行数

创建 table_count,用于存储行数(建议:使用现有的迁移模式 user1,并把 table_count 创建在 user1 用户下)

create table user1.table_count (owner varchar(200),table_name varchar(200),num_rows int);

获取 user1 模式下的所有表的行数

DO $$DECLAREone_row record;
stmt varchar(200);
num_rows int;BEGIN
 EXECUTE 'truncate table table_count';
FOR one_row IN (select schemaname, tablename from pg_tables where upper(schemaname)=upper('user1') and upper(tablename)!=upper('table_count')) loop
 stmt := 'select count(*) from ' || one_row.schemaname || '.' || one_row.tablename || '';
raise notice '%', stmt;EXECUTE stmt into num_rows;
raise notice '%', num_rows;insert into table_count values(upper(one_row.schemaname), upper(one_row.tablename), num_rows);END loop;commit;END $$;

获取 YashanDB 精确行数

从 PostgreSQL 迁移到 YashanDB 迁移 user1 模式,迁移完成后可以创建 table_count ,用于存储行数(建议:创建新的用户 db_yashan,并把 table_count 创建在 db_yashan 用户下)

create table db_yashan.table_count (owner varchar(200),table_name varchar(200),num_rows int);

获取 user1 用户下的所有表的行数

declarev_owner VARCHAR2(100);
v_tabname VARCHAR2(100);
stmt VARCHAR2(200);
num_rows number;beginEXECUTE IMMEDIATE 'truncate table db_yashan.table_count';
for rec in (select owner,table_name from dba_tables where owner=upper('user1') and tablename!=upper('table_count') order by 1, 2)            loop
            select rec.owner,rec.table_name into v_owner,v_tabname from dual;
            stmt := 'select count(*) from "' || v_owner || '"."' || v_tabname || '"';
            EXECUTE IMMEDIATE stmt INTO num_rows;
            insert into db_yashan.table_count values(v_owner,v_tabname,num_rows);
           end loop;
end;
/

对比 PostgreSQL 和 YashanDB 的精确行数

SELECT
        owner,
        table_name,
        p_num_rows,
        y_num_rowsFROM
        (        SELECT
                nvl(p.owner, y.owner) owner,
                nvl(p.table_name, y.table_name) table_name,
                p.num_rows p_num_rows,
                y.num_rows y_num_rows        FROM
                (                SELECT
                        owner,
                        table_name,
                        num_rows                FROM
                        user1.table_count) p        FULL OUTER JOIN
        (                SELECT
                        owner,
                        table_name,
                        num_rows                FROM
                        db_yashan.table_count) yON
                p.owner = y.owner                AND p.table_name = y.table_name        ORDER BY
                p.owner,
                p.table_name
)WHERE
        nvl(p_num_rows, 999999999999999999999999999999) != nvl(y_num_rows, 999999999999999999999999999999)
;


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3071836/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    639968