-
介绍ora2og是一个将Oracle数据库迁移至openGauss的工具,主要编程语言为perl,通过perl DBI模块连接Oracle数据库,自动扫描并提取其中的对象结构及数据,产生SQL脚本,通过手动或自动的方式应用到openGauss。此外,工具还提供丰富配置项,用户可以自定义迁移行为。ora2og初始代码源自ora2pg,一个将Oracle迁移至PostgreSQL的开源工具。版本为release v21.1:https://github.com/darold/ora2pg/tree/v21.1。优秀特性支持导出数据库绝大多数对象类型,包括表、视图、序列、索引、外键、约束、函数、存储过程等。提供PL/SQL到PL/PGSQL语法的自动转换,一定程度避免了人工修正。可生成迁移报告,包括迁移难度评估、人天估算。可选对导出数据进行压缩,节约磁盘开销。配置选项丰富,可自定义迁移行为。执行迁移环境本篇使用环境:Oracle : 华为云服务器2核4G + CentoOS 7.6 +Oracle 11.2openGauss:华为云服务器2核4G + CentoOS 7.6 +openGauss 3.1.0极简版两台节点网络互通迁移前准备Ora2og工具既可以安装在Oracle服务器上,也可以安装在openGauss服务器上。本篇中将工具部署在Oracle服务器上。注意,如果安装在openGauss上时,需要在服务器上安装Oracle客户端。下载路径:cid:link_0 软件安装Ora2Pg语言为perl,故需安装所需perl模块。# root用户下操作yum install -y perl-ExtUtils-CBuilder perl-ExtUtils-MakeMakeryum install perl-CPAN安装DBI、JSON、DBD:Pg、DBD:Oracle,Ora2Pg依赖这些软件去连接数据库。perl -MCPAN -e 'install DBI'perl -MCPAN -e 'install JSON'perl -MCPAN -e 'install DBD::Pg'export ORACLE_HOME=/u01/app/oracle/product/11.2.0/export LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/lib使用 perl -MCPAN -e 'install DBD::Oracle' 安装报错了,换了另一种自己编译的方式。[root@oraclehost ora2pg-master]# perl -MCPAN -e shell......cpan[1]> get DBD::Oracle........Checksum for /root/.cpan/sources/authors/id/Z/ZA/ZARQUON/DBD-Oracle-1.83.tar.gz ok......cpan[2]> quit[root@oraclehost ora2pg-master]# cd /root/.cpan/sources/authors/id/Z/ZA/ZARQUON/[root@oraclehost ZARQUON]# tar -zxvf DBD-Oracle-1.83.tar.gz[root@oraclehost ZARQUON]# cd DBD-Oracle-1.83[root@oraclehost DBD-Oracle-1.83]# perl Makefile.PL[root@oraclehost DBD-Oracle-1.83]# make && make installora2og工具安装安装Ora2Pg 为目标安装路径,为下载的代码路径。 如果服务器上没有git的话,可以从网站把源码包下载再解压。mkdir -p /opt/software/ora2pggit clone cid:link_2# 进到代码目录下perl Makefile.PL PREFIX=make && make install# 设置环境变量,查看是否安装成功export PERL5LIB=/libexport PATH=$PATH:/usr/local/bin需要确保bin路径下有ora2pg这个文件,否则命令找不到。执行ora2pg --help 创建迁移项目ora2pg --init_project oramig创建迁移项目后会在当前目录下生成oramig目录模板,如下所示。其中主要包含两个脚本export_schema.sh和import_all.sh,后续导出和导入即使用这两个脚本。schema和sources目录存放各对象的DDL语句,区别在于schema存放PL/SQL语法转化为PL/PGSQL后的语句, sources目录存放转化前PL/SQL的语句,data目录存放表数据文件,config目录包含配置文件ora2pg.conf,reports目录存放迁移报告。Oracle建个表,用来做测试数据create table customerchat.test(name char(10));insert into customerchat.test values('opengauss');create table customerchat.xxx(name char(20));insert into customerchat.xxx values('yy');openGauss侧新建数据库mydb和用户tuser ,迁移时会用到。mydb=#create database mydb;mydb=# CREATE USER tuser WITH PASSWORD '自己定义';mydb=# GRANT ALL PRIVILEGES TO tuser;mydb=# alter database mydb owner to tuser;配置ora2pg.conf注意路径,后面执行sh的时候会找config/ora2pg.conf。cp <your_install_dir>/etc/ora2pg/ora2pg.conf.dist /config/ora2pg.confORACLE相关参数:ORACLE_HOME /u01/app/oracle/product/11.2.0/ORACLE_DSN dbi:Oracle:host=oracleIP;sid=orcl;port=1521ORACLE_USER customerchat // 这里用的oracle普通用户和密码ORACLE_PWD XXXXXSCHEMA customerchat //一般和用户名一样openGauss相关参数:PG_DSN dbi:Pg:dbname=mydb;host=localhost;port=5432PG_USER tuserPG_PWD 自己定义的密码工具自身参数:DATA_LIMIT 默认是10000,如果oracle服务器内存较小,比如4G以下,可以修改为2500或5000,否则可能会报内存不足。更多更详细的配置项说明,可查看官网:https://ora2pg.darold.net/documentation.html测试一下配置:执行 ora2pg -t SHOW_VERSION -c config/ora2pg.conf 会返回连接的Oracle版本号。测试迁移修改迁移工具oramig目录下export_schema.sh中导出类型EXPORT_TYPE和SOURCE_TYPE,本次迁移导出TABLE。在oramig目录下执行sh export_schema.sh执行完成后 在schema/tables生成 table.sql ,里面是建表脚本。reports/目录下生成的report报告还是在oramig目录下执行导入为了使用openGauss命令行工具gsql,需要将数据库的bin和lib加在操作系统的环境变量PATH和LD_LIBRARY_PATH中。可以直接root用户执行gsql测试下。3. 将import_all.sh里的psql修改为gsql。执行导入脚本,表示使用用户tuser登录openGauss中mydb的数据库,ip和端口,-f选项表示跳过用户和数据库是否需要创建的检查。sh import_all.sh -d mydb -o tuser -h openGaussIP -p 5432 -f执行成功。可以看到表和数据都已经迁移过来。Ora2Pg不足Ora2Pg对PL/SQL和PL/PGSQL的语法转换处理采用正则表达式和文本替换的方式,先天设计不足,很难覆盖所有的语法,目前仅支持部分转换。因此,Ora2Pg可以满足SQL简单的应用迁移,对于复杂的语法,并不能完全保证转换的正确性,需要对生成的SQL语句进行核对,必要时需要人工修正。FAQ报错:Path to pg_config? /opt/software/openGauss/bin/pg_config/opt/software/openGauss/bin/pg_config: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory环境自带的是1.0.2,得升级libssl.so。[root@oraclehost ~]# openssl version -aOpenSSL 1.0.2k-fips 26 Jan 2017yum remove openssl获取新的版本并安装wget https://www.openssl.org/source/openssl-1.1.1c.tar.gztar -zxvf openssl-1.1.1c.tar.gzcd openssl-1.1.1c./config --prefix=/usr/local/openssl #如果此步骤报错,需要安装perl以及gcc包make && make installln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1ln -s /usr/local/openssl/bin/openssl /usr/bin/opensslln -s /usr/local/openssl/include/openssl /usr/include/opensslecho "/usr/local/openssl/lib" >> /etc/ld.so.confldconfig -vsudo yum install postgresql-devel再重新执行 perl -MCPAN -e 'install DBD::Pg'2、perl 报错 Can’t locate JSON.pm in @INC解决:sudo perl -MCPAN -e 'install JSON'3、如何查看SID ?SQL> select instance_name from V$instance;4、执行 ora2pg -t SHOW_VERSION -c ora2pg.conf 报错FATAL: -1 ... ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var or PATH (Windows) and or NLS settings, permissions, etc.Aborting export...Export $ORACLE_HOME了半天,发现原来是 ora2pg.conf 里面配置的ORACLE_HOME 不对5、执行ora2pg -t SHOW_VERSION -c ora2pg.conf报错FATAL: 12505 ... ORA-12505: TNS:listener does not currently know of SID given in connect descriptor (DBD ERROR: OCIServerAttach)Aborting export...解决办法 SID配置有问题 或者 /etc/hosts有问题。参考下面连接解决https://www.shuzhiduo.com/A/6pdDw0bl5w/6、执行 ora2pg -t SHOW_VERSION -c config/ora2pg.conf 报错install_driver(Oracle) failed: Can't load '/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.11.1: cannot open shared object file: No such file or directory at /usr/lib64/perl5/DynaLoader.pm line 190.解决办法export LD_LIBRARY_PATH=$ORACLE_HOME/lib7、执行 ora2pg -t SHOW_VERSION -c ora2pg.conf报错FATAL: ORA-08178: illegal SERIALIZABLE clause specified for user INTERNAL (DBD ERROR: OCIStmtExecute)解决办法:不要使用sys用户,使用普通oracle用户(没有可新建),然后修改 ora2pg.conf中的用户名和密码8、执行sh import_all.sh -d mydb -o tuser -h IP -p 5432 -f 提示Out of memory , 但是top显示还有1G多。解决办法:Opened ./config/ora2pg.conf and modfied set DATA_LIMIT 5000 or 2500 solved the issue.9、报错:DBD::Pg::db do failed: ERROR: permission denied for relation xxx解决办法:需要给openGauss的角色赋权限mydb=# grant all privileges to tuser;10、报错: DBI connect('dbname=mydb;host=openGaussIP;port=5432','testuser',...) failed: connection to server at "openGaussIP", port 5432 failed: none of the server's SASL authentication mechanisms are supported at /opt/software/ora2pg/lib解决办法:这个错是openGauss返回的。需要把openGauss的pg_hba.conf & postgres.conf再搞下。修改 data/single_node/postgresql.conf 中password_encryption_type = 1 。修改pg_hba.conf 中然后重启openGauss:gs_ctl restart -D /opt/software/openGauss/data/single_node
-
DWS数据库,8.1.0.3版本。当业务场景为查询大量数据到客户端本地时(如:select * from aa;该结果返回100万数据),在查询结束,数据传输到本地过程时,通过验证查询状态为idle in transaction状态问题:该状态为数据返回给客户端状态,测试的速率为10M/S,有什么办法可以提高数据返回速率?
-
未来5年将是国产数据库的主战场。数据库作为竞争最激烈的国产软件赛道,在技术服务、人才发展等方面有着巨量需求。华为云数据库测评热身,快速了解自身数据库水平,闯关So-easy!还有HUAWEI WATCH GT2、无线耳机、华为手环4等万元奖品拿!活动时间:2022年11月8~12月31活动对象:开发者、高校师生、对数据库感兴趣的0基础用户 活动内容: 参与方式: 点击参与 GOGOGO!!! 测评规则:测评内容:了解数据库的基础理论如关系、表、事务等,SQL基础知识;测评共 (20) 道题,总分100分,通过测评分数80分;需在(60分钟)内交卷,过程中无法暂停,请提前安排好时间;如未及时交卷,则本次考试作废推荐使用Chrome浏览器,或Firefox浏览器本测试2小时内只允许答题一次有问题可添加小助手微信18209232786激励规则:1.“邀请好友”激励:“邀请用户”奖励有效邀请人数奖品奖品数量X≥5圆领T恤/(加湿器、手机支架、字母笔、U盘、文件夹),任选二,随机发200X≥10荣耀体脂称2/折叠烧水壶50X≥15茶壶套装/HUAWEI mini蓝牙音箱 _绮境森林70X≥30华为手环4/保温杯/HUAWEI背包70X≥50HUAWEI FreeLace无线耳机活力版曜石黑+华为10000mA移动电源20X≥100HUAWEI WATCH GT2 运动款32MB+ 4GB曜石黑5有效邀请指,邀请来的用户需要完成活动报名,并通过自测题2.完成 “华为云数据库自测题”奖励:“华为云数据库自测题”奖励奖品奖品数量HUAWEI FreeLace无线耳机10华为手环4/hilink保温杯20罗技鼠标5032 U盘80加湿器100手机支架100字母笔100文件夹100中奖率是通过自测题人数的20%,实际奖品发放数量将按照奖品数量上限的比率提供。抽奖形式:活动结束后,将参与数据导入第三方开源抽奖平台进行抽奖,抽奖过程全程透明公开。抽奖结束后将在此贴公布结果&收集收货信息。活动其他事宜通知○所有活动奖品将在活动结束后20个工作日内完成发放;○活动奖品颜色随机,且部分奖品数量有限发完即止,如对应奖品无库存会更换等价奖品;○活动奖品需要进行华为云账号实名认证后领取;○为保证活动的公平公正,华为云有权对恶意刷活动资源(“恶意”是指为获取资源而异常注册账号等破坏活动公平性的行为),利用资源从事违法违规行为的用户收回抽奖及奖励资格。○本活动规则由华为云在法律规定范围内进行解释。华为云保留不时更新、修改或删除本活动规则的权利。○本次活动回帖内容需满足华为云论坛发帖规范:cid:link_1
-
存储引擎概述 存储引擎顾名思义就是数据的存放方式,比如mysql有myisam和innodb存储引擎,他们都是行存,只是myisam不支持事务。另外存储引擎还有列模式、行模式、内存数据库等等,openguass的存储引擎关系可以用以下图来表示: 下面分别介绍以下这几种存储引擎的区别:磁盘存储引擎 顾名思义是数据按照一定格式存放在物理磁盘的数据块中,opengauss的最小存储单位是page页,类似于Oracle的最小存储单位block,写入磁盘则把page页里的内容写入到物理磁盘block中。内存存储引擎 与磁盘存储引擎相反,数据是存放到内存中的,内存中的数据没有办法想磁盘一样进行持久化,但是内存数据库节省了物理磁盘到内存的IO处理,效率会更高。为了满足数据的持久化不至于重启以后数据就丢失了,目前很多数据库也会把内存里的数据按照一定条件进行落盘进行持久化处理,每次重新启动以后把物理文件内容重新加载到内存中。类似于opengauss的MOT。行存储引擎 属于磁盘存储引擎,数据按照行的格式存储在物理磁盘中,行存储引擎适合OLTP交易类系统,opengauss默认的也是行存储引擎。列存储引擎 属于磁盘存储引擎,数据按照列的格式存储在物理磁盘中,行存储引擎适合OLAP交易类系统。行存列存区别 opengauss既支持行存也支持列存,也就是目前所说的HTAP交易分析类系统,据我所知目前有部分厂商虽然都支持行存和列寸,但是需要额外的付费。用两张图展示一下一个表在行存和列存模式在物理磁盘上的存储形式:idnameage1张三322李四224王五425赵六52行存磁盘存储格式如下: 列存磁盘存储格式如下: 可见列寸更适合统计分析类交易,比如max、min等等,另外更便于压缩存放。Ustroe存储引擎 Ustore是原地更新(in-place update)设计,支持 MVCC(Multi- Version Concurrency Control,多版本并发控制),类似于Oracle的设计,最新的数据(已提交)与前版本数据(undo)分开存储,支持闪回查询等操作。但是现在这个存储引擎不是opengauss的默认存储引擎,估计后续版本稳定以后会默认此存储引擎。 Astroe存储引擎 采用追加更新模式,及同一个page页中既存在前映像也存在当前值,只是前映像会被标记为删除,当前是opengauss的默认存储引擎,Astroe存储引擎由于同一个块中包含太多的前映像,如果频繁的更新操作会导致大量的磁盘“垃圾”,因为在执行查询操作的时候即使标记了删除也会扫描,所以大大的降低性能,建议定期执行VACUUM或者VACUUM full进行清理。 和存储引擎相关的参数概述 正常情况下在执行一条sql查询的时候数据库从物理磁盘读取整个数据块到内存,然后在内存中进行过滤返回满足条件的行,当然在某些情况下可以把算子下推,来减少加载到内存的数据块数量,因此就需要在内存中开辟一块区域来存放从磁盘读取出来的块,这个类似于oracle的块高速缓冲区mysql的innodb_buffer_pool等,几乎所有的RDBMS数据库在内存中都有一块这样的区域。磁盘存储引擎 磁盘存储引擎的参数主要存放在postgresql.conf配置文件中,默认路径在DATADIR中,主要通过两个参数控制buffer的大小,主要有shared_buffers及cstore_buffers两个参数,shared_buffers是行存储引擎使用的内存,cstore_buffers主要控制列存储引擎使用的内存,如果是OLTP类系统可以把cstore_buffers调小,如果是OLAP类系统可以把cstor_buffers调大避免浪费内存,如果是HTAP类系统则都可以调大。MOT存储引擎 MOT是通过内存存储引擎管理的内存表,支持事务的ACID特性,由于内存是易丢失的,所以如果想保证数据的持久性,需要把MOT的数据同步到磁盘中,MOT是通过WAL重做日志和MOT检查点实现了数据的持久性。 MOT的参数不在postgresql.conf中进行定义,它的参数主要在mot.conf中,这里不在详细转述,请参考官方文档。也可以参考我之前些的一篇关于mot测试的笔记《MogDB学习笔记-从9开始(存储引擎和闪回)》创建基于不同存储引擎的表创建基于Astore的行存表 在Mogdb中默认创建的Astore的表,通过设置enable_default_ustore_table参数为on可以修改为默认创建Ustore的表,当然在创建表的时候可以指定storage_parameter参数选择存储引擎。CREATE TABLE astore_table ( id character varying(2) NOT NULL, name character varying(50), saler numeric(10,2), dept_no character varying(2) ) WITH (STORAGE_TYPE=ASTORE);创建基于Ustore的行存表CREATE TABLE astore_table ( id character varying(2) NOT NULL, name character varying(50), saler numeric(10,2), dept_no character varying(2) ) WITH (STORAGE_TYPE=USTORE);创建列存表CREATE TABLE column_table ( id character varying(2) NOT NULL, name character varying(50), saler numeric(10,2), dept_no character varying(2) ) WITH (ORIENTATION = COLUMN);创建MOT内存表create FOREIGN TABLE mot_table ( id character varying(2) NOT NULL, name character varying(50), saler numeric(10,2), dept_no character varying(2) );
-
GaussDB问题定位相关语句审计日志SELECT * FROM pg_query_audit('$start_time', '$finish_time');查看内存select * from pv_total_memory_detail; select contextname, count(*), sum(totalsize)/1024/1024 as "totalsize-MB", sum(usedsize)/1024/1024 as "usedsize-MB", sum(freesize)/1024/1024 as "freesize-MB" from PV_SESSION_MEMORY_CONTEXT group by contextname order by 3 desc limit 20; select contextname, sum(totalsize)/1024/1024 sum, sum(freesize)/1024/1024, count(*) count from pv_session_memory_detail group by contextname order by sum desc limit 10;查看磁盘使用情况df -h du -sh ./* | sort -nrGaussDB问题处理相关语句sql命令按时间清理所有用户连接EXECUTE DIRECT ON ALL 'select pg_terminate_session(pid,sessionid),pid,sessionid from pg_stat_activity where usename in (''***'', ''***'') and query_start < ''2022-01-25 02:09:00''';清理DN上的用户idle连接EXECUTE DIRECT ON datanodes 'select pg_terminate_session(pid,sessionid),pid,sessionid from pg_stat_activity where usename in (''usename1'', ''usename2'') and state = ''idle''';清理单个CN上的所有连接select pg_terminate_session(pid,sessionid),pid,sessionid from pg_stat_activity where usename in ('$usename1', '$usename');清理单个节点上的连接select pg_terminate_session(pid,sessionid),pid,sessionid from pg_stat_activity where usename in ('$usename1', '$usename') and query_start < '$time';确认长事务EXECUTE DIRECT ON ALL 'select pgxc_node_str() as node_name, query_start, pid, sessionid, query from pg_stat_activity where state = ''active'' order by query_start';gs_guc命令调整磁盘只读阈值gs_guc reload -Z cmserver -N all -I all -c "datastorage_threshold_value_check=95"cm_ctl 命令切换主DN到指定的DN上cm_ctl switchover -n nodeid -D datadir
-
死锁SELECT datname, deadlocks FROM dbe_perf.summary_stat_database WHERE datname NOT IN ('template0','template1');时延SELECT P80, P95 FROM dbe_perf.statement_responsetime_percentile;线程池SELECT node_name,worker_info FROM dbe_perf.global_threadpool_status;查看流控状态select * from dbe_perf.global_recovery_status order by 1,2; 连接池select count(*) from pg_stat_get_pooler_status(); SELECT source_node_name, sum(in_use) FROM dbe_perf.global_pooler_status WHERE in_use = true GROUP BY source_node_name;buffer命中率SELECT datname,blks_hit,blks_read, blks_hit/(blks_hit+blks_read) as buffer FROM dbe_perf.summary_stat_database WHERE datname NOT IN ('template0','template1');
-
华为云数据库【GaussDB入门级开发者认证】欢迎您的参与玩沙箱实验,送499元代金券活动时间:11月1日~券送完为止活动内容:沙箱实验:GaussDB 部署参与方式:本帖下方回帖即可回复内容:华为云账号+实验进度100%截图完成沙箱实验打卡以后,请填写问卷,小助手帮忙配置499元代金券哦!领到代金券以后,请点击《GaussDB入门级开发者认证-Java》进行认证购买!回帖已设置仅小助手可见,请大家按要求回复哦,不会外泄大家的隐私~注意事项请务必使用个人账号参与活动(IAM、企业账号等账号参与无效)。其他事宜请参考【华为云社区常规活动规则】,本活动最终解释权归活动主办方所有。
-
本例只列举常用的赋权操作,其他的权限操作,可以参考产品文档。-- 先在目标数据库创建账户: create user $user_name identified by '$password'; -- 配置账号,并赋予相应权限: -- database权限,本例权限要求:需要具备create,connect权限。 grant create,connect on database $database_name to $user_name; -- schema权限,本例权限要求:需要具备create,usage权限。 grant create,usage on schema $schema_name to $user_name; -- table权限(以业务表owner执行),权限要求:需要具备表的DML权限。 grant alter, index, select,update,insert,delete on all tables in schema $schema_name to $user_name; -- 给用户附replication权限 alter user $user_name REPLICATION; -- 给用户附monitor权限: alter user $user_name monadmin;
-
分类文档链接备注最新动态cid:link_4特性清单cid:link_3原子APIcid:link_2FAQcid:link_1华为云在线课程(免费)openGauss数据库工程师学习路径cid:link_0该学习路径是HCIA-openGauss V1.0职业认证学习指引,包含openGauss概述、数据库安装部署、体系结构及关键特性、数据库及对象管理、SL基础、云数据库GaussDB等内容。华为云开发者网云数据库 RDS开放能力cid:link_5
-
2.1 常用视图pg_stat_activity pgxc_stat_activity pg_thread_wait_status pgxc_thread_wait_status dbe_perf.summary_statement + dbe_perf.statement dbe_perf.get_global_slow_sql_by_timestamp + dbe_perf.statement_history gs_asp + dbe_perf.local_active_session wdr报告 + snapshot视图2.2 常用语句查看当前正在执行语句及其执行时长select coorname, substring(0, 50, query), state, usename, now()-query_start as elp from pgxc_stat_activity where pid!=0 and usename in ('$user_name') order by elp desc; select coorname, unique_sql_id, substring(query,0,100), state, usename, now()-query_start as elp from pgxc_stat_activity where pid!=0 and usename like '%hicloud%' order by elp desc;生成计划set current_schema to $schema_name; set max_datanode_for_plan=1; -- CN上执行 explain $sql; -- 不会真正执行SQL explain verbose $sql; -- 会真正执行SQL,写操作谨慎操作 -- DN上执行 explain performance $sql; -- 会真正执行SQL,写操作谨慎操作 explain analyze $sql; -- 会真正执行SQL,写操作谨慎操作"使用PBE生成计划set current_schema to schema_name; set max_datanode_for_plan=1; prepare select_record(integer, varchar) as select col3 from t_1 where col1 = $1 and col2 = $2; explain execute select_record(1, 'abc'); explain verbose execute select_record(1, 'abc'); explain analyze execute select_record(1, 'abc'); explain performance execute select_record(1, 'abc');"动态生成计划select * from dbe_perf.statement where unique_sql_id = $unique_sql_id; -- CN执行 select * from dynamic_func_control('GLOBAL', 'STMT', 'TRACK', '{"$unique_sql_id", "L2"}'); -- 抓此SQL的FULLSQL L2 execute direct on datanodes 'select * from statement_history where unique_query_id = $unique_sql_id and query_plan ilike ''%cost%'' limit 1'; select * from dynamic_func_control('GLOBAL', 'STMT', 'UNTRACK', '{"$unique_sql_id"}'); -- 取消抓取 select * from dynamic_func_control('GLOBAL', 'STMT', 'LIST', '{}'); select * from dynamic_func_control('GLOBAL', 'STMT', 'CLEAN', '{}'); execute direct on datanodes 'select query_plan from statement_history where unique_query_id = $unique_sql_id and query_plan ilike ''%cost%''';查看当前正在执行的语句的等待事件select a.pid, a.sessionid, a.datname, a.usename, a.client_addr, a.xact_start, a.query_start, (now() - a.query_start)::text as query_runtime, w.wait_status,w.wait_event,w.locktag,w.lockmode,w.block_sessionid,a.query from pg_stat_activity a join pg_thread_wait_status w on a.sessionid = w.sessionid where a.pid <> pg_backend_pid() and a.state = 'active' and a.client_addr is not null order by query_runtime desc; select * from pgxc_thread_wait_Status where tid in (select pid from pgxc_stat_activity where pid != 0); select * from pg_thread_wait_Status where tid in (select pid from pg_stat_activity where pid != 0); select sample_time,substring(unique_query,0,100),application_name,wait_status from dbe_perf.local_active_session where wait_status not in (''none'',''wait cmd'') order by start_time desc;查询连接数-- 查询整个实例的用户连接数,CN执行 select count(*) from pgxc_stat_activity where usename in ('$user1', '$user2'); -- 查询当前集群上所有CN的连接数,CN执行 select coorname, count(*) from pgxc_stat_activity group by 1; -- 查询一个节点的用户连接数,CN和DN均可 select count(*) from pg_stat_activity where usename in ('$user1', '$user2');查看表上的锁select a.pid,a.sessionid,substring(a.query,0,50) from pg_stat_activity a,pg_locks l where a.pid=l.pid and a.sessionid=l.sessionid and l.relation=(select oid from pg_class where relname='$table_name');
-
应用是python3.4 应用升级python版本比较困难,请问有没有3.4版本对应的psycopg2库
-
想要远程使用JDBC连接GaussDB,但在设置监听地址时,重启数据库会报错使用语句 gs_guc set -I all -c"listen_addresses='localhost,10.62.45.7'" 重启服务后报错,无法启动更改为原先的localhost可以启动但会出现如下WARNING
-
想请问一下,在ECS上部署了openGauss后尝试远程连接,连接没有成功但是再次打开数据库就发现无法打开,且restart也不可以重装了以后再次启动数据库就会显示 could not create any HA TCP/IP sockets,有什么办法可以解决吗?
-
1.1 常用函数pg_database_size() -- 数据库使用的磁盘空间。 pg_table_size() -- 表使用的磁盘空间。 pg_total_relation_size() -- 表和索引共使用的磁盘空间。 pg_indexes_size() -- 索引使用的磁盘空间。1.2 常用系统表pg_class -- 存储数据库对象信息及其之间的关系。 pg_index -- 存储索引的一部分信息,其他的信息大多数在PG_CLASS中。 pg_namespace -- 存储schema相关的信息。 pg_database -- 存储数据库相关的信息。1.3 常用视图pg_stat_user_tables -- 显示所有用户自定义普通表和toast表的状态信息。 pg_stat_user_indexes -- 显示数据库中用户自定义普通表和toast表的索引状态信息。1.4 常用语句查询库大小select datname, pg_database_size(datname), pg_database_size(datname)/1024/1024/1024 as "dataSize_GB" FROM pg_database where datname not in ('template1', 'template0');查看schema的所有者-- pg_user这个视图只有sysadmin用户有权限查,普通用户无法查询。 SELECT s.nspname schema_name,u.usename schema_owner FROM pg_namespace s, pg_user u WHERE nspname = '$schema_name' AND s.nspowner = u.usesysid;获取表结构set current_schema to $schema; select pg_get_tabledef('$table_name'); 或 select pg_get_tabledef('$schema_name.$table_name');示例:select pg_get_tabledef('testschema.t1'); pg_get_tabledef ---------------------------------------- SET search_path = testschema; + CREATE TABLE t1 ( + id integer, + name character varying(15) + ) + WITH (orientation=row, compression=no)+ DISTRIBUTE BY HASH(id) + TO GROUP group_version1; (1 row)查询表大小-- 查询单个确定表的大小。 select pg_table_size('$schema_name.$table_name'); -- 不包含索引,单位B select pg_total_relation_size('$schema_name.$table_name'); -- 包含索引,单位B -- 查询连接的数据中,所有用户表的大小 SELECT schemaname,relname, pg_total_relation_size(concat(schemaname,'.',relname))/1024/1024/1024 table_size_GB FROM PG_STAT_USER_TABLES ORDER BY 3 DESC; -- 包含索引 SELECT schemaname,relname, pg_table_size(concat(schemaname,'.',relname))/1024/1024/1024 table_size_GB FROM PG_STAT_USER_TABLES ORDER BY 3 DESC; -- 不包含索引" SELECT table_name,pg_size_pretty(table_size) AS table_size,pg_size_pretty(indexes_size) AS indexes_size,pg_size_pretty(total_size) AS total_size FROM (SELECT table_name,pg_table_size(table_name) AS table_size,pg_indexes_size(table_name) AS indexes_size,pg_total_relation_size(table_name) AS total_size FROM (SELECT concat(table_schema,concat('.',table_name)) AS table_name FROM information_schema.tables where table_schema ilike '$schema_name') AS all_tables ORDER BY total_size DESC) AS pretty_sizes;示例-- 查询单个确定表的大小。 select pg_table_size('testschema.t1'); pg_table_size --------------- 17801216 (1 row) -- 查询连接的数据中,所有用户表的大小 SELECT schemaname,relname, pg_total_relation_size(concat(schemaname,'.',relname))/1024/1024/1024 table_size_GB FROM PG_STAT_USER_TABLES ORDER BY 3 DESC; -- 包含索引 schemaname | relname | table_size_gb ------------+--------------+-------------------- testschema | t_ran2 | 2.288818359375e-05 testschema | t_ran1 | 1.52587890625e-05 testschema | t_ran3 | 1.52587890625e-05 -- 需要指定schema SELECT table_name,pg_size_pretty(table_size) AS table_size,pg_size_pretty(indexes_size) AS indexes_size,pg_size_pretty(total_size) AS total_size FROM (SELECT table_name,pg_table_size(table_name) AS table_size,pg_indexes_size(table_name) AS indexes_size,pg_total_relation_size(table_name) AS total_size FROM (SELECT concat(table_schema,concat('.',table_name)) AS table_name FROM information_schema.tables where table_schema ilike 'testschema') AS all_tables ORDER BY total_size DESC) AS pretty_sizes; table_name | table_size | indexes_size | total_size -------------------------+------------+--------------+------------ testschema.t_ran2 | 24 kB | 0 bytes | 24 kB testschema.t_ran3 | 16 kB | 0 bytes | 16 kB testschema.t_ran1 | 16 kB | 0 bytes | 16 kB查看表的统计信息-- 查看指定schema和table的统计信息。 select * from pg_stat_user_tables where schemaname = '$schema_name' and relname = '$table_name'; -- 查询全库的表的活跃元组数、死元组数及死元组占比。 select schemaname, relname, n_live_tup, n_dead_tup, (n_dead_tup/(n_live_tup+1)) as dead_rating from pg_stat_user_tables order by rating desc,n_dead_tup desc limit 30; -- 查看表大小及活跃元组、死元组、死元组比例。 select schemaname, relname, pg_size_pretty(table_size) as table_size, pg_size_pretty(indexes_size) as indexes_size, pg_size_pretty(total_size) as total_size, round((total_size / pg_database_size(current_database())) * 100,2) as "percent(%)", n_live_tup,n_dead_tup,(n_dead_tup/(n_live_tup+1)) as dead_tuple_rating from (select schemaname, relname, pg_table_size(concat(schemaname,'.',relname)) as table_size, pg_indexes_size(concat(schemaname,'.',relname)) as indexes_size, pg_total_relation_size(concat(schemaname,'.',relname)) as total_size,n_live_tup,n_dead_tup from pg_stat_user_tables) order by "percent(%)" desc;示例:select schemaname, relname, pg_size_pretty(table_size) as table_size, pg_size_pretty(indexes_size) as indexes_size, pg_size_pretty(total_size) as total_size, round((total_size / pg_database_size(current_database())) * 100,2) as "percent(%)", n_live_tup,n_dead_tup,(n_dead_tup/(n_live_tup+1)) as dead_tuple_rating from (select schemaname, relname, pg_table_size(concat(schemaname,'.',relname)) as table_size, pg_indexes_size(concat(schemaname,'.',relname)) as indexes_size, pg_total_relation_size(concat(schemaname,'.',relname)) as total_size,n_live_tup,n_dead_tup from pg_stat_user_tables) order by "percent(%)" desc; schemaname | relname | table_size | indexes_size | total_size | percent(%) | n_live_tup | n_dead_tup | dead_tuple_rating ------------+--------------+------------+--------------+------------+------------+------------+------------+------------------- testschema | t_ran2 | 24 kB | 0 bytes | 24 kB | .01 | 4 | 0 | 0 testschema | t_ran1 | 16 kB | 0 bytes | 16 kB | .01 | 3 | 0 | 0 testschema | t_ran3 | 16 kB | 0 bytes | 16 kB | .01 | 6 | 0 | 0查询数据是否倾斜SELECT a.count,b.node_name FROM (SELECT count(*) AS count,xc_node_id FROM table_name GROUP BY xc_node_id) a, pgxc_node b WHERE a.xc_node_id=b.node_id ORDER BY a.count desc;查询给定分布键归属的DNselect * from pgxc_node where node_id = (select xc_node_id from $table where $col = $value limit 1);示例select * from pgxc_node where node_id = (select xc_node_id from t1 where id = 1); node_name | node_type | node_port | node_host | node_port1 | node_host1 | hostis_primary | nodeis_primary | nodeis_preferred | node_id | sctp_port | control_port | sctp_port1 | control_po rt1 | nodeis_central | nodeis_active -------------------+-----------+-----------+--------------+------------+--------------+----------------+----------------+------- dn_xxx | D | 45700 | 10.30.41.163 | 45700 | 10.30.41.163 | t | f | f | -564789568 | 45702 | 45703 | 0 | 0 | f | t查询表的主键select pg_constraint.conname as pk_name from pg_constraint inner join pg_class on pg_constraint.conrelid = pg_class.oid where pg_class.relname = '$table_name' and pg_constraint.contype = 'p';查询事务信息select xmin, xmax, * from $table_name;
-
查询的时候报错ERROR: canceling statement due to conflict with recovery Detail: User query might have needed to see row versions that must be removed.Line Number: 1
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签