问答题整理人员:杨有田、黄超、彭冲、高云龙
问:什么是MogDB数据库?
答:MogDB是EnMotech openGauss DataBase Enterprise Edition的缩写,是云和恩墨基于openGauss开源数据库进行定制、推出的企业发行版。它将围绕高可用、安全、自动化运维、数据库一体机和SQL审核优化等企业需求,解决企业用户落地。其核心价值是易用性、高性能、高可用等和全天候的企业支持。
问:MogDB的适用场景有哪些?
答:和pgsql受众类似。MogDB数据库可应用于电商、金融、O2O、电信CRM/计费等大并发、大数据量、以联机事务处理为主的交易型应用场景和工业监控、远程控制、智慧城市能力延展、智能家居、车联网等物联网应用场景。不仅具备关系型数据库的基本功能,更针对企业级应用场景和特性打造高可用、监控等增强功能
问:MogDB支持哪些操作系统?
答:请参考https://docs.mogdb.io/zh/ptk/v0.4/overview
问:MogDB有哪些安装方式?
答:PTK工具安装(推荐)、标准安装(om)、手工安装和容器化安装
问:MogDB对安装环境有什么要求?
答:请参考https://docs.mogdb.io/zh/mogdb/v3.0/environment-requirement
问:应用程序如何连接访问MogDB?
答:针对不同的开发语言,提供了对应的开发规范及驱动包,可以参考https://docs.mogdb.io/zh/mogdb/v3.0/1-development-specifications
问:MogDB支持哪些客户端工具访问?
答:支持Data Studio、DBeaver、navicate及其他可以访问PG的客户端工具,但推荐使用云和恩墨自研的Mogeaver工具,详情参考:https://docs.mogdb.io/zh/mogdb/v3.0/mogeaver-overview
问:MogDB如何控制客户端访问?
答:允许哪些ip或者ip段访问数据库可以通过pg_hba.conf文件来控制,详情参考https://docs.mogdb.io/zh/mogdb/v3.0/1-client-access-authentication#%E9%85%8D%E7%BD%AE%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8E%A5%E5%85%A5%E8%AE%A4%E8%AF%81
问:MogDB常见部署架构是什么?
答:MogDB支持三种角色节点:主库、备库、级联库,其中备库和级联库加起来最多支持8个,常见架构是1主N备,某客户生产架构为1主5备1级联,如下图
问:MogDB有哪些高可用方案?
答:当前高可用方案有三种,分别是MogHA、CM和DCF,目前MogHA 和 CM 高可用架构方案使用较多,主动应对服务器宕机、实例宕机等多种情况,使数据库的故障持续时间从分钟级降到秒级。
问:MogDB的RPO/RTO怎样?高可用性可以达到99.999%吗?
答:RPO=0,RTO<10s,SLA=99.999%
问:有没有环境可以快速体验MogDB的各项功能?
答:云和恩墨提供了一个MogDB在线实训环境,用来MogDB数据库线上学习与实训,请参考:https://docs.mogdb.io/zh/mogdb/v3.0/mogdb-playground
问:MogDB支持哪些开源组件?
答:目前支持的开源组件有:compat-tools、mogdb-monitor、wal2json、mog_filedump、mog_xlogdump
问:MogDB使用有哪些限制?
答:请参考 https://docs.mogdb.io/zh/mogdb/v3.0/usage-limitations
问:MogDB默认安装在哪个系统用户下?
答:系统用户可以在 preinstall过程 或者 ptk配置文件 中自定义,习惯上使用omm系统用户
问:MogDB如何查看状态?
答:OM安装:gs_om -t status --detail
PTK安装:ptk cluster -n <cluster name> status
手工安装:gs_ctl query -D $PGDATA
问:MogDB如何启停?
答:OM安装: 切换到操作系统用户omm,执行gs_om -t start/stop
PTK安装:ptk cluster -n <cluster name> start/stop/restart
手工安装:gs_ctl -D $PGDATA start/stop
问:如何查看数据库有哪些参数?
答:可以通过官方文档查看https://docs.mogdb.io/zh/mogdb/v3.0/guc-parameter-list,也可以通过数据库视图pg_settings查看
问:如何查看数据库参数值?
答:数据库参数当前值可以直接通过 show paraname的方式查看,也可以通过pg_settings视图查看
问:如何修改数据库参数值?
答:可以通过命令行方式alter system/database/user set paraname TO value; 修改,可以通过gs_guc工具修改(om/ptk安装),也可以直接修改postgresql.conf参数文件
问:如何限制数据库可以使用多少服务器内存?
答:可以通过参数max_process_memory 来限制每个数据库实例使用的服务器内存上限,在MogDB中内存大体分为共享内存和动态内存两种,建议max_process_memory设置为服务器内存的60% - 80% 之间。
问:与内存相关的参数有哪些?
答:shared_buffers限制行存使用共享内存大小,work_mem内部排序和hash使用的内存大小,maintenance_work_mem维护操作使用内存大小,还有对应的列存表使用的内存参数如cstore_buffers、psort_work_mem
问:数据库最大并发连接数是多少?
答:可以通过max_connections来设置最大并发连接数,理论上最大值是262143,但实际最大值是动态的,与其他并发参数设置及内存大小相关。
问:MogDB不同兼容模式之间有哪些区别?
答:目前支持三种兼容模式,分别是Oracle、MySQL和PostgreSQL,默认兼容Oracle。
在Oracle兼容性下,数据库将空字符串作为NULL处理,数据类型DATE会被替换为TIMESTAMP(0) WITHOUT TIME ZONE。
在MySQL兼容性下,将字符串转换成整数类型时,如果输入不合法,会将输入转换为0,而其它兼容性则会报错。
在PG兼容性下,CHAR和VARCHAR以字符为计数单位,其它兼容性以字节为计数单位。 例如,对于UTF-8字符集,CHAR(3)在PG兼容性下能存放3个中文字符,而在其它兼容性下只能存放1个中文字符。
问:MogDB 和 Oracle在快照上有什么区别?
答:Oracle:基于SCN,块级别,循环undo segment实现,支持闪回功能,存在大事务回滚、快照过旧ORA-01555问题。
MogDB:基于事务编号txid,行级别,无需undo,大事务可瞬间回滚,存在数据块(block page)空间及性能消耗问题。
问:MogDB主备和Oracle Data Guard有什么异同点?
答:备库都可以做为查询库分担主库压力
问:MogDB和Oracle 关于schema有什么区别?
答:Oracle 中 schmea 和 user 是一个概念;MogDB中schema 和 user是不同的,数据库对象都被创建在指定的schema 中,不通user对不通的schema及对象有不通的权限。
问:支持哪些数据库迁移到MogDB?
答:云和恩墨提供了一款数据库迁移工具MTK,支持Oracle,DB2,openGauss,SqlServer,MySQL,Informix 等数据库之间的互相迁移 (互为源和目标);也支持将数据库内容导出成可执行的 SQL 脚本 (源数据库内容迁移到文本)。MTK工具详情请参考:https://docs.mogdb.io/zh/mtk/v2.0/overview
问:Oracle数据库与MogDB之间的兼容性如何?
答:MogDB 与 Oracle数据库在功能上高度兼容,针对Oracle自身的一些函数,云和恩墨提供了一个开源兼容工具包,支持oracle、db2和mysql,迁移数据库之前在MogDB跑一遍脚本,工具参考:https://gitee.com/enmotech/compat-tools
问:迁移到MogDB数据库后如何评判业务的兼容性?
答:云和恩墨提供一款异构数据库迁移前的 SQL 兼容和性能评估工具SCA,可用于异构数据迁移前的兼容性评估,评估源数据库中的实际业务 SQL 在目标库中是否存在语法问题,以及评估两款异构数据库中的 SQL 实际执行的性能差异。目前支持五种源端数据库,包括: Oracle, MySQL, DB2, PostgreSQL, Informix。
问:如何取消私有用户身份
答:目前取消私有用户身份,只能私有用户自己取消自己的,用命令:alter user username with NOINDEPENDENT;
问:动态脱敏策略如何生效?
答:首先,需要确保打开安全策略开关enable_security_policy=on,默认是off关闭状态,设置为on,让所有动态脱敏策略生效;然后确保单个脱敏策略的是有效的,查看GS_MASKING视图,确保字段polenabled值为t,否则修改用alter masking policy policy_name enable;
问:gs_dump有什么导出文件格式?
答:gs_dump有四种导出文件格式,用-F或者-format选项指定,分别是纯文本格式、自定义归档格式、目录归档格式、tar归档格式,其中纯文本格式适合小数据库,可以文本编辑,可以用gsql工具导入,中型或者大型数据库推荐自定义归档格式。
问:如何查看当前节点的角色?
答:查看节点角色有五种方式: 第一种是进入数据库通过pg_is_in_recovery()函数来查看,如果返回的是f,代表是primary角色,否则是standby角色;第二种是在节点通过控制文件查看pg_controldata $PGDATA;第三种是通过gs_ctl query -D $PGDATA查看;第四种是如果有gs_om,通过gs_om -t status --detail查看;第五种是如果通过ptk安装,可以通过ptk cluster status -n clustername查看。
问:如何查看物理复制关系?
答:可以通过系统视图pg_stat_replication来查看主节点有几个备节点,备节点的地址、延迟情况及同步状态等。
问:如何查看复制槽信息?
答:可以通过函数pg_get_replication_slot_name()查看所有的复制槽,包括逻辑槽和物理槽,通过函数pg_create_logical_replication_slot() 和 pg_create_physical_replication_slot() 添加复制槽,通过函数pg_drop_replication_slot()删除复制槽
问:数据库日志有哪些?
答:MogDB的日志有pg_clog、pg_csnlog、pg_llog、pg_xlog、om、gs_profile、pg_audit、pg_perf、sql_monitor、pg_log、archivelog
问:哪些数据库日志不可以清理?
答:pg_clog事务状态记录文件,如果丢失无法判断最后一次checkpoint以来食物的状态,数据库会报错;pg_csnlog保存事务(latestCompletedXid<=>nextXid之间)提交逻辑时间戳,如果丢失新事务会报错;pg_llog保存逻辑复制时的状态数据;pg_xlog保存数据库的redo日志。
问:如果wal日志被清理了怎么办?
答:如果是在数据库正常情况下清理了wal日志,需要立刻执行checkpoint操作,并检查复制关系;如果是在数据库正常关机的情况下做了wal文件,对数据库也没有影响,因为数据库在正常关闭前也需要做全量检查点;如果数据库是异常宕机,这时启动数据库会失败,再允许少量数据丢失的情况下可以考虑使用pg_resetxlog进行恢复。
问:wal 和 archive 是什么关系?
答:wal日志类似oracle的redo日志,archive是wal的备份文件,当wal文件写满或者达到archive_timeout参数阈值后就会自动生成一个archive文件
问:控制wal数量的参数是什么?
答:wal保留数量由wal_keep_segments 和 checkpoint_segments两个参数来控制,这两个参数值是软限制,一般wal保留数量在阈值附近时正常的,不建议手工清理wal文件,而是通过调整这两个数据库参数来自动清理
问:wal堆积不清理一般是什么问题?
答:wal文件堆积的因素很多,常见的堆积原因有:1、开启归档后归档失败,比如归档目录满或者归档目录不存在;2、有异常的复制槽,可以通过 pg_get_replication_slot_name()查看复制槽状态
问:链接报错:Forbid remote connection with initial user.
答:初始化用户(超户)只允许在数据库服务器本地通过socket的方式访问数据库,不允许通过tcp/ip的方式远程访问,若要远程访问需要使用其他数据库用户
问:连接报错FATAL: Forbid remote connection with trust method!
答:不允许远程通过trust方式访问数据库,修改白名单文件pg_hba.conf,把trust 修改为 md5或sha256
问:如何在数据库服务器本地通过tcp/ip的方式密码访问数据库?
答:一般本地访问数据库是通过socket的方式,如果要使用tcp/ip的方式通过密码访问数据库,需要在127.0.0.1/32 这一行添加指定用户访问本地数据库的加密方式
问:安装数据库时提示The cluster has been installed
答:执行vi ~/.bashrc查看环境变量,将GAUSS_ENV=2改为GAUSS_ENV=1,重新执行安装命令即可。
问:数据库启动时报错Failed to read gaussdb.state: 0 Failed to set gaussdb.state with UNKNOWN_STATE。
答:gaussdb.state有问题,在data_directory目录下,删除gaussdb.state,重启数据库会生成新一个gaussdb.state
问:数据库启动失败,但启动日志没有有效的信息,该怎么办?
答:当我们启动数据库时,打印出来的启动日志并不会非常详细,需要我们结合数据库日志pg_log一起确定数据库启动失败的原因
问:MogDB数据库支持哪几种备份恢复类型?
答:支持逻辑备份恢复、物理备份恢复以及ustore表的闪回恢复
问:支持逻辑备份和恢复的工具有哪些?
答:gs_dump,可以自定义导出一个数据库或其中的对象(模式、表、视图等)。导出的格式可选择纯文本格式或者归档格式。纯文本格式的数据只能通过gsql进行恢复,恢复时间较长。归档格式的数据只能通过gs_restore进行恢复,恢复时间较纯文本格式短;
gs_dumpall,可以导出MogDB数据库的所有数据,包括默认数据库postgres的数据、自定义数据库的数据、以及MogDB所有数据库公共的全局对象,支持多并发,只能导出纯文本格式的数据,导出的数据只能通过gsql进行恢复,恢复时间较长。
问:gs_restore恢复数据可以自定义顺序吗?
答:dump备份时不仅仅是备份结构和数据,还有关于备份描述的元数据,我们可以生成dump清单文件。它是一个文本文件,每行详细描述一个对象,清单文件行就像指针一样,引用dump中已经存在的内容。我们可以自定义顺序来恢复,或者编辑清单进行快速恢复,详细示例请参考文章:https://www.modb.pro/db/509150
问:MogDB的用户及其权限如何定义使用?
答:在MogDB数据库中,用户等于带有登陆属性的角色,关于用户属性及其权限可以参考https://www.modb.pro/db/434212
问:openGauss与PostgreSQL权限管理有什么相同及不同点?
答: 数据库对象的ACL、行级安全、角色权限整理是一样的,但也有一些差异,schema、db、cluster三个方面的对比请参考文章:https://www.modb.pro/db/516180
问:报错role "user_xx" cannot be dropped because some objects depend on it
答: 这个错误说明该用户下有所属对象,不允许删除,需要先确定哪些对象有依赖关系,是否需要保留,如果保留需要修改依赖关系,如果不需要保留通过如下两条命令进行删除,drop owned by user_xx cascade;drop user user_xx;
问:MogDB是否支持通过FDW的方式访问外部数据库?
答:MogDB支持FDW功能,可以支持的远程服务器类型包括Oracle、MySQL(MariaDB)、PostgreSQL/openGauss/MogDB(postgres_fdw)及file_fdw
问:xxx_fwd是否可以直接使用?
答:xxx_fwd都是插件,目前MogDB默认编译postgres_fdw 和 file_fdw 可以直接使用,如果需要使用oracle_fdw 和 mysql_fdw需要自己编译,请参考https://docs.mogdb.io/zh/mogdb/v3.0/fdw-introduction
问:MogDB如果访问Oracle,使用dblink插件是否可以?
答: MogDB插件包里的dblink插件只能用于同构数据库之间的访问,访问oracle数据库需要使用oracle_fdw插件,使用方法可以参考:https://www.modb.pro/db/485223
问:MogDB支持哪些类型的表?
答:MogDB支持的表分为单表、非日志表、临时表和分区表,其中单表分为行存表和列存表。
问:支持全局临时表么?
答:支持的,MogDB支持的临时表分为local和global两种,如果建表时不指定globa关键字,默认会创建本地临时表。
问:MogDB支持哪些分区类型?
答:目前可以支持范围分区、哈希分区和列表分区。
范围分区,将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的
列表分区,将数据基于各个分区内包含的键值映射到每一个分区,分区包含的键值在创建分区时指定。
哈希分区,将数据通过哈希映射到每一个分区,每一个分区中存储了具有相同哈希值的记录。
问:如何查看数据库当前正在执行的sql?
答:可以通过pg_stat_activity视图查看当前正在执行的SQL,正在运行的事务以及事务执行完后未断开的连接。
问:如何查看历史慢sql?
答:在开启enable_resource_track参数的情况下,通过log_min_duration_statement控制慢sql的阈值,超过阈值的SQL会记录到postgresql数据库下的statement_history表中。
问:如何查看数据库执行的全量sql?
答:可以通过打开参数log_statement来将数据库执行的所有sql全部打印到数据库日志中。
问:如何查看最近5分钟耗资源的wait event
答:可以在数据库执行如下sql
SELECT s.type, s.event, t.count
FROM dbe_perf.wait_events s, (
SELECT event, COUNT (*)
FROM dbe_perf.local_active_session
WHERE sample_time > now() - interval '5min'
GROUP BY event)t WHERE s.event = t.event ORDER BY count DESC
问:如何查看当前数据库锁阻塞信息?
答:可以通过如下sql找到锁阻塞的详细信息
with tl as (select usename,granted,locktag,query_start,query
from pg_locks l,pg_stat_activity a
where l.pid=a.pid and locktag in(select locktag from pg_locks where granted='f'))
select ts.usename locker_user,ts.query_start locker_query_start,ts.granted locker_granted,ts.query locker_query,tt.query locked_query,tt.query_start locked_query_start,tt.granted locked_granted,tt.usename locked_user,extract(epoch from now() - tt.query_start) as locked_times
from (select * from tl where granted='t') as ts,(select * from tl where granted='f') tt
where ts.locktag=tt.locktag order by 1;
问:如何查看数据库实例中慢SQL语句执行信息
答:
select * from dbe_perf.get_global_slow_sql_by_timestamp(start_timestamp, end_timestamp);
例如: select * from DBE_PERF.get_global_slow_sql_by_timestamp('2020-12-01 09:25:22', '2020-12-31 23:54:41');
最后修改时间:2022-12-03 09:23:06
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




