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

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

 往期回顾 

第一期 FAQ 1~20

第二期 FAQ 21~40

第三期 FAQ 41~60

第四期 FAQ 61~80

第五期 FAQ 81~100

  Q 101  

添加/删除索引会阻塞读写么?

添加/删除索引属于DDL操作,会给表添加一个SHARE锁,所以会阻塞数据读写,为了减少索引维护对读写的影响,增加了CONCURRENTLY选项来降低锁级别,可以在不阻塞读写的情况下添加索引,但代价是创建维护时间将变长。

  Q 102  

如何维护索引?

重建索引有以下两种方式:

  1. 先删除索引(DROP INDEX),再创建索引(CREATE INDEX)。
  2. 使用REINDEX重建索引:
    1)使用REINDEX TABLE语句重建索引;
    2)使用REINDEX INTERNAL TABLE重建desc表(包括列存表的cudesc表)的索引。

  Q 103  

MogDB 是否支持视图?

MogDB 支持普通视图和物化视图,普通视图是虚拟表,相当于子查询SQL的别名;而物化视图是一种特殊的物理表,其实际是存储SQL结果集,起到缓存的作用,所以物化视图要比普通视图在性能上有极大的提升。

  Q 104  

如何刷新物化视图?

物化视图目前支持全量刷新和增量刷新,暂不支持自动刷新数据,需要用户手动REFRESH [INCREMENTAL] MATERIALIZED VIEW [view_name]。具体使用方法参考:https://docs.mogdb.io/zh/mogdb/v3.0/2-incremental-materialized-view-usage

  Q 105  

视图是否支持增删改操作?

对于简单的普通视图,执行update/insert/delete 操作会真实的作用在底层物理表,但是物化视图不支持增删改操作,只支持查询语句。

  Q 106  

运维关注点有哪些?

日常数据库运维,数据库管理员需要关注硬件服务器资源使用情况、主备延迟、慢SQL、数据库刷盘的速度、连接数使用情况、数据库日志的错误信息以及数据库备份状态。

  Q 107  

常用的系统表或者视图有哪些?

pg_stat_activity:查看当前数据库连接数使用情况,当前是否有执行时间较长的SQL;

statement/statement_history:查看历史慢SQL;

pg_stat_replications:查看主备角色之间同步状态,主备之间同步延迟;

gs_total_memory_detail:查看当前实例内存分布及使用情况;

pg_get_replication_slots():查看复制槽的状态,失效复制槽需要及时清理;

local_pagewriter_stat():查看本地刷盘情况,是否有脏页堆积;

pg_lock:查看锁等待信息;

dbe_perf.wait_events:查看等待事件。

  Q 108  

数据库最大连接数有限制么?

MogDB 是线程类型数据库,数据库可以支持的连接数上限取决于给实例分配内存的大小,内存越小可以支持的连接数越少,默认一个空连接大约占用5MB的内存。

  Q 109  

FATAL:Too many clients already, current/active: 1000/7 , max_connections/reserved: 1000/3 是什么原因?

有以下三种可能:

  1. 是业务设置的minidle连接数过多,且没有timeout参数没有生效;
  2. 是数据库实例设置的最大连接数过低,无法满足业务访问需求;
  3. 是数据库本身bug,但这种可能性非常低。

  Q 110  

FATAL: Forbid remote connection with trust method! 是什么原因?

安全因素,除了数据库本机可以通过127.0.0.1免密登陆,其他用户及IP需要通过认证登陆,可以通过修改pg_hba.conf文件来处理;建议非DBA不要直接在数据库服务器登陆数据库,业务系统应单独部署在 MogDB 服务器外部,否则可能会影响数据库运行性能。

  Q 111  

启动时报 The socket file already exists. Port:26000.是什么原因?

类似的问题都是冲突造成的,冲突的原因可能是没有提前规划好,但也有可能是数据库突然crash,一些文件没有及时释放,比如postmaster.pid文件。

  Q 112  

MogDB 和 Oracle 在MVCC的实现上有什么区别?

Oracle:基于SCN,块级别,循环undo segment实现,支持闪回功能,存在大事务回滚、快照过旧ORA-01555问题。

MogDB:基于事务编号txid,行级别,无需undo,大事务可瞬间回滚,存在数据块(block page)空间及性能消耗问题。

  Q 113  

MogDB 如何屏蔽或优化原生 PostgreSQL 中遇到的XID用尽问题?

MogDB 将transactionid由int32改为了int64,64位的xid永远不可能耗尽,虽然xid改为了64位,但是过期的xid依旧需要freeze清理,只是永远不用担心会发生xid回卷宕机的风险。

  Q 114  

MogDB 中double write 与 MySQL 二次commit有什么区别?

实现原理与 MySQL 机制相同,其目的是为了保证数据的强一致性,防止因为坏块导致数据丢失,从而导致数据无法恢复。

  Q 115  

MogDB 支持闪回特性么?

从2.1版本开始支持闪回和回收站功能,但是2.1版本非常稳版本,以3.0版本支持为准;若要使用闪回功能,需要使用ustore存储方式才有效。

  Q 116  

闪回特性支持哪些场景?

闪回特性支持闪回查询和闪回恢复,闪回查询可以查询过去某个时间点表的某个snapshot数据;而闪回恢复支持两种方式,分别是基于MVCC多版本的数据恢复和基于数据库回收站的恢复。

  Q 117  

闪回恢复适用哪些场景?

基于MVCC多版本的数据恢复:适用于误删除、误更新、误插入数据的查询和恢复。

基于类似Windows系统回收站的恢复:适用于误DROP、误TRUNCATE的表的恢复。

  Q 118  

数据库参数分为哪几种类型?

数据库参数类型一共分6类,分别是INTERNAL、POSTMASTER、SIGHUP、BACKEND、SUSET、USERSET,其中INTERNAL是数据库内置参数不可以修改,POSTMASTER类型参数需要重启数据库实例才可以生效,其他类型的参数可以加载生效。

  Q 119  

在对 MogDB 进行参数调优时,哪些参数是对数据库性能影响较大?

对数据库性能影响较大的比较多,有内存参数、存储参数、统计参数及同步参数,大家比较常关注的参数是内存参数,比如max_process_memory 、shared_buffers 和 work_mem.

  Q 120  

在主备下场景的同步参数,对数据库性能影响很大吗?

同步配置参数synchronrous_commit共有5个参数值off、local、remote_receive、remote_write/on、remote_apply,默认值是on,随着参数级别升高数据安全性越高,但对主库性能影响越大。