为了能够帮助大家循序渐进地了解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
如何维护索引?
重建索引有以下两种方式:
- 先删除索引(DROP INDEX),再创建索引(CREATE INDEX)。
- 使用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 是什么原因?
有以下三种可能:
- 是业务设置的minidle连接数过多,且没有timeout参数没有生效;
- 是数据库实例设置的最大连接数过低,无法满足业务访问需求;
- 是数据库本身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,随着参数级别升高数据安全性越高,但对主库性能影响越大。