循序渐进丨MogDB 百问百答(第8期)

59e3a903b03a09151230a0e56369aa41.png

为了能够帮助大家循序渐进地了解MogDB、认识其特性和能力、熟悉它的使用,我们特推出「MogDB百问百答」连载,每期放出20个FAQ,希望能对您有参考价值!(感谢问题整理与回答人员:高云龙、彭冲、黄超、杨有田)

 往期回顾 

第一期 FAQ 1~20

第二期 FAQ 21~40

第三期 FAQ 41~60

第四期 FAQ 61~80

第五期 FAQ 81~100

第六期 FAQ 101~120

第七期 FAQ 121~140

  Q 141  

调用函数报错ERROR: invalid memory alloc request size XXXXXX

函数接收的参数长度超过限制,字符串处理函数除了length相关函数,其他函数和操作符不支持大于1GB CLOB作为参数。合规长度最大值是268435454,2的28次方-2。

  Q 142  

列存储的页面是如何组织的?

列存储引擎的存储基本单位是CU(Compression Unit,压缩单元),即表中一列的一部分数据组成的压缩数据块。列存储引擎使用了CUDesc(压缩单元描述符)表来记录一个列存储表中CU对应的元信息。每个CU对应一个CUDesc的记录,在CUDesc里记录了整个CU的事务时间戳信息、CU的大小、存储位置、magic校验码、min/max等信息。

  Q 143  

列存表适用什么场景?

适用数据量较大(如数据仓库),列的数据特征比较相似,重复度比较高的业务场景,适合按列进行压缩,不但压缩比很高,还会节省大量磁盘空间,同时也会提高单位作业下的IO效率。

  Q 144  

列存为什么会减少IO负载?

列存储会根据数据属性进行编码及压缩处理,对计算方式做了优化,对于表中列数比较多,但是访问的列数比较少时,列存储可以按需读取列数据,大大减少不必要的读IO,提高查询性能。

  Q 145  

如何查看当前数据库的大小?

可以直接在gsql客户端执行\l+,也可以通过函数来查询:

select pg_size_pretty(pg_database_size(datname)) from pg_database

函数查询的方式更适合用来做监控巡检指标。

  Q 146  

如何查看某张表大小?

可以直接在gsql客户端执行\dt+,也可以通过函数pg_relation_size()或pg_table_size()来查指定表的大小;如果要查询所有表占用的磁盘空间可以使用函数pg_total_relation_size(),这个函数会计算索引。

  Q 147  

如果查看索引的大小?

可以直接在gsql客户端执行\di+,也可以使用pg_relation_size()来查看指定索引的大小,如果想查一个表中所有索引的大小,可以使用pg_indexes_size()函数来查询。

  Q 148  

什么场景下需要重做备库?

重做备库一般有以下几种方式:

1、手工搭建主备集群,重做备库的情况下;

2、当备库与主库延时较大,或者主备关系断开且无法追上;

3、备库故障无法启动的情况下需要重做备库;

4、原主库故障修复后以备库角色加入集群的情况下也需要。

  Q 149  

重做备库有哪些方式?

最常用的重做备库的方式是通过gs_ctl build命令来重做备库,默认情况下是优先使用增量bild的方式,如果增量build失败则会转换到全量build;也可以考虑使用全量备份+wal归档日志的方式,需要配置restore_command命令或者将归档日志直接放到wal目录中。

  Q 150  

可以从备库做build么?

默认情况下,备库/级联备做build是去找主库,但也可以从指定的备库去做build,需要使用参数-b standby_full -C "localhost=xxx.xxx.xxx.1 localport=$standby2_port remotehost=xxx.xxx.xxx.1 remoteport=$standby1_port" 的方式。

  Q 151  

表连接方式的hint有哪些?

Plan Hint是特殊SQL语法,可用于手工干预SQL执行计划的选择,在SQL中加入hint语法,可以明确指导SQL优化器选择特定执行计划。用于禁用或使用nestloop/hashjoin/mergejoin进行连接:

/*+ [no] nestloop/hashjoin/mergejoin(table1 table2) */

  Q 152  

表访问方式的hint有哪些?

用于单独禁用或使用顺序扫描:

/*+ [no] tablescan(table) */

用于单独禁用或使用索引/只索引扫描:

/*+ [no] indexscan/indexonlyscan(table index) */

  Q 153  

表连接顺序的hint有哪些?

指定表连接的顺序:

/*+ leading(join_table_list) */

例:

/*+ leading(t1 (t2 t3)) */

t2与t3表先进行join,再和t1进行join。

  Q 154  

报错ERROR unsupported view for memory protectionfeature is disabled.

把参数enable_memory_limit打开:

gs_guc set -N all -I all -c "enable_memory_limit=on"

若max_process_memory-sharedbuffer-cstore buffers少于2G,openGauss强制把enable_memory_limit设置为off。

  Q 155  

报错memory is temporarily unavailable

可能动态内存不足,请检查动态内存使用情况:

select contextname,pg_size_pretty(sum(totalsize)),pg_size_pretty(sum(freesize)) from gs_session_memory_detail group by contextname order by sum(totalsize) desc limit 10;

  Q 156  

MogDB 2.0.1 导入数据库报错out of memory

用gsql导入容易导致out of memory,建议用二进制方式导出和导入。举例:

gs_dump -U xxx -W xxx@123 -h 127.0.0.1 -p 51000 -F c -f /home/omm/xxx_local_db.dmp
gs_restore xxx_local_db.dmp -p 51000 -d xxx -U xxx -U xxx -W xxx@123

  Q 157  

MogDB 支持序列吗?

支持。MogDB 的序列可以产生一组等间隔的数值,能自增,主要用于表的主键,主要的SQL语句是create sequence、alter sequence、drop sequence、alter。

  Q 158  

什么是 MogDB 的虚拟索引?

MogDB 的虚拟索引功能支持用户在数据库中直接进行操作,本功能将模拟真实索引的建立,避免真实索引创建所需的时间和空间开销,用户基于虚拟索引,可通过优化器评估该索引对指定查询语句的代价影响。

  Q 159  

MogDB 的虚拟索引使用步骤?

1、使用函数hypopg_create_index创建虚拟索引;

2、开启GUC参数enable_hypo_index;

3、执行EXPLAIN + 查询语句 来对比创建虚拟索引后的优化效果;

4、使用函数hypopg_drop_index删除指定oid的虚拟索引。

  Q 160  

程序提示密码错误怎么办?

业务程序提示账号或密码错误,需要判断一下填写的账号密码是否正确,可以通过直连数据库的方式验证;如果直连数据库没有问题,说明可能是程序的密码加密方式有问题,需要检查程序是否支持sha256及数据库pg_hba.conf文件中是否配置一致;如果直连数据库有问题也提示账号密码不对,且无法找回,可以考虑重置密码。

4ffcda071440d57600db360acd411bb1.jpeg

关注我们

回复关键词“MogDB

了解有关 MogDB 产品的更多信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值