自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 达梦8 通过SF_INJECT_HINT解决新排序机制下失控语句影响其他SQL执行的问题

SORT_BUF_SIZE参数定义本地排序区的上限,实测中上限是SORT_BUF_SIZE的2倍( --03134283938-20221019-172201-20018版本)。这是因为全局排序区随着系统中各会话SQL的运行,达到了参数SORT_BUF_GLOBAL_SIZE定义的上限,后续排序语句都将失败。就是那条耗光全局排序区的语句。新排序机制引入了全局排序区概念,虽然避免了内存溢出导致系统OOM,但却引入了另外一个问题:个别编写不好的语句可能会占满整个排序区,导致后续所有正常语句无法执行。

2024-06-23 18:04:26 385 1

原创 达梦8 通过日志解释数据守护系统的关停顺序

总结一下先停备库时系统将做如下处理:1、主库向备库发送实时归档失败2、主库状态变为SUSPEND,备库归档状态变INVALID这时查询v$arch_status视图ARCH_STATUS字段等于INVALID。3、主库open,继续对外提供服务备库再次启动后1、守护系统状态设置为DW_RECOVERY2、通知主库同步历史归档这时主库查询v$arch_send_info视图FOR_RECOVERY字段等于Y。查询v$recover_status视图有记录。3、通知主库

2024-06-23 11:36:50 483

原创 达梦8 兼容MySQL语法支持非分组项作为查询列

对于Oracle数据库,使用GROUP BY时,SELECT中的非聚合列必须出现在GROUP BY后面,否则就会报上面的错误,达梦默认也有此限制,但MySQL无此限制,这就导致了MySQL数据库迁移到达梦后,如果使用默认参数,此类SQL无法正常执行。

2024-06-20 20:40:43 509

原创 达梦8 开启物理逻辑日志对系统的影响

物理逻辑日志,是按照特定的格式存储的服务器的逻辑操作,专门用于 DBMS_LOGMNR 包挖掘获取数据库系统的历史执行语句。要开启物理逻辑日志的功能,需要满足下面两个条件: 首先,要设置 RLOG_APPEND_LOGIC 为 1、2、3 或者 4;新安装的数据库RLOG_APPEND_LOGIC和RLOG_IGNORE_TABLE_SET参数默认0,即没有开启物理逻辑日志,无法使用DBMS_LOGMNR 包挖掘获取数据库系统的历史执行语句。几乎增加了100%。3、执行脚本,统计时间和生成的归档大小。

2024-06-09 10:55:10 622 1

原创 达梦8 新老排序机制比较

相比较而言,传统排序机制缺乏灵活性。当系统中会话很多的时候,总体上可能消耗过多内存。但大的会话却由于本地buffer不够而使用临时表空间完成排序,SQL响应时间达不到预期。新排序机制解决了上述问题。小会话可以使用一个分片(默认1M),大会话可以自由扩展至总内存不超过SORT_BUF_GLOBAL_SIZE。但新排序机制也有明显的缺点:当代码编写不好的时候,某异常SQL可能耗光整个全局排序区,造成后续需要排序的会话都无法进行。

2024-06-09 08:20:32 547

原创 达梦8 探寻达梦排序原理:新排序机制(SORT_FLAG=1)

测试版本:--03134283938-20221019-172201-20018SORT_FLAG,0代表传统排序机制,1代表新排序机制。新排序机制时,系统均为每一个进行排序操作的会话在全局排序区至少分配1个内存分片。根据排序的尺寸需要,最多可扩展至SORT_BUF_GLOBAL_SIZE。当会话无法扩展时,则使用临时表空间协助完成排序,这时可以通过v$mtab_used_history查询。排序操作至少需要抢占一个内存分片,当全局排序区耗尽时,后续会话的排序操作将报-544错误。

2024-06-09 06:34:22 499

原创 达梦8 探寻达梦排序原理:传统排序机制(SORT_FLAG=0)

测试版本:SORT_FLAG,0代表传统排序机制,1代表新排序机制。传统排序机制时,无论排序的数据实际有多少,系统均为每一个进行排序操作的会话分配SORT_BUF_SIZE大小(实际可能略大)的本地排序区(RT_MEMOBJ_VPOOL)。如果排序的尺寸大于SORT_BUF_SIZE,则使用临时表空间协助完成排序,这时可以通过v$mtab_used_history查询。

2024-06-08 18:19:57 750

原创 达梦 连接数据库[-70028]:Create SOCKET connection failure.

上图可见,回滚未提交事务耗时816531毫秒(pseg_crash_trx_rollback all active trx )后数据库启动完毕(nsvr_startup end)。disql SYSDBA/SYSDBA连接成功。执行命令disql SYSDBA/SYSDBA连接数据库,报[-70028]:Create SOCKET connection failure.grep PORT_NUM /home/dmdba/test/dm.ini确认端口是默认的5236。

2024-06-07 05:56:40 2208

原创 达梦8 并行查询

伴随着语句insert /*+ parallel(4) */ into d select * from a order by 2执行,监控语句有了输出并不断变化。达梦数据库可以通过在查询语句加/*+ parallel */ HINT并行执行。下面以一个排序语句为例。我们通过一条监控语句查询排序区的使用情况。dm_sql_thd sql执行线程。最初没有查询结果(no rows)dm_lpq_thd 并行线程。VDTA POOL 全局排序区。

2024-06-06 22:22:13 550

原创 达梦 执行查询语句时报[-544]:Out of sort buf space

但真实原因是前面执行的语句耗光了全局排序区,后面SQL任何小的排序操作都会报这个错误从而执行失败。下面是一个测试用例。参数SORT_FLAG=1,SORT_BUF_GLOBAL_SIZE=100。而后又执行了一条需要排序的语句,结果报排序区:Out of sort buf space。达梦数据库有时执行SQL中有时报[-544]:Out of sort buf space, try to adjust SORT_BUF_GLOBAL_SIZE, SORT_BUF_SIZE, SORT_BLK_SIZE.

2024-06-06 21:50:21 794

原创 达梦8 网络中断对系统的影响

测试环境:三节点实时主从版本:--03134283938-20221019-172201-20018。

2024-06-06 10:47:45 418

原创 dm8 什么时候视图中统计的内存会超过OS

原因是DMSERVER为每一个涉及排序的会话分配了固定的内存(SORT_BUF_SIZE参数定义),但本例中的这些SQL排序需要的内存量其实很少。系统将根据实际需要为每个会话分配排序内存,总尺寸不超过SORT_BUF_GLOBAL_SIZE。虽然SORT_FLAG参数设置为1后使用新排序排序机制,但系统依旧为每个会话额外分配SORT_BUF_SIZE内存。但实际大多数场景下,OS中看到的数据远大于视图中的统计。注:VDTA POOL是新机制下的排序区,RT_MEMOBJ_VPOOL是老机制时的排序区。

2024-06-02 16:36:42 366

原创 达梦8 内存泄漏泄漏原因分析之一

以上插入SQL执行的过程中查询V$MEM_POOL视图,DATA_SIZE字段的值不断增长,SQL语句执行完毕后,DATA_SIZE增加的部分消灭。但从上图中可见,但只有会话退出后在OS上的显示才回到测试前。在实际使用过程中经常发现DMSERVER进程在OS中的内存占用使用远远超过实际情况。用lsof命令搜索上述会话的thrd_id,显示打开了许多文件。会话退出后相关资源才完全释放。

2024-06-02 11:18:14 649

原创 达梦8 RLOG_COMPRESS_LEVEL参数对系统的影响

测试环境是一套主备达梦数据库。下面在主备库分别设置参数进行测试。

2024-05-25 14:52:25 311

原创 达梦数据库使用dmlcvt命令找回更改前的数据

在生产系统上不小心修改了表数据后最快的方法是用闪回查询找回。但时间不能超过undo_retention(默认90秒)。其实最标准的处理方法是在其他机器上将数据库恢复到修改前的时刻。但数据库比较大时恢复时间较长。真实场景可能比较急。那么也可以分析归档日志知道修改前的状态。分析归档日志的最常用方法是LOGMNR日志挖掘。但要求事先已经打开了附加日志RLOG_APPEND_LOGIC(默认不打开)。本文介绍另一种找回办法dmlcvt

2024-05-18 17:29:39 634

原创 达梦数据库限制用户登录IP测试

上图可见,192.168.100.101客户端可以登录连接上192.168.100.100机器上的数据库。限定该用户只能通过192.168.100.101ip登录数据库。而由于我们定义的用户安全限制,即使是本机也无法登录数据库。达梦数据库创建用户时可以限制登录ip和时间段。

2024-05-09 20:08:48 874

原创 达梦数据刷盘测试

可以看到第一次strings文件没有输出,说明刚写的数据在数据库的BUFFER缓冲区内,还没有刷到硬盘。执行完checkpoint(100)后再strings文件,看到了数据。达梦数据库为了保证数据故障恢复的一致性,REDO 日志的刷盘必须在数据页刷盘之前进行。下面我们通过测试来验证是不是这样。执行我们事先准备的SHELL脚本。

2024-05-09 19:25:40 306

原创 达梦主从数据库实例恢复

上图可见,系统执行alter database mount进入mount模式,执行alter database primary切为主库。如图可见,会话139695153554808向aaa表插入了10000行数据。上图可见,准备恢复(460520)的,正好是节点1被杀之前的活动事务。上可见,460520事务回滚完毕,aaa表写入的数据被撤销。主库异常崩溃,备库接管,rollback主库的未完成事务。数据库在异常重启后完成实例恢复,回滚崩溃前未提交的事务。sql语句对主库的数据修改同步到备库中。

2024-05-06 21:41:32 312

原创 达梦数据库的会话数限制

达梦可以通过初ini参数MAX_SESSIONS在全局设置数据库的最大连接数,也可以在创建用户时指定SESSION_PER_USER选项针对特定用户进行限制。这时SYSDBA用户可以受限模式登录,能查询,不能写库。不过重要地是它可以通过sp_close_session过程释放会话资源。

2024-03-31 08:59:17 1478

原创 达梦8 备份巡检脚本

ARCH_BAK_TIME表示最新归档备份的发起时间,DB_BAK_TIME表示最新数据库备份的发起时间。NULL表示未发现成功完成的备份集。第一行显示最近24小时的数据库备份和归档日志备份情况,第二行显示昨天之前7日的备份情况。本脚本用于巡检24小时之内的备份情况。

2024-02-03 09:53:40 375

原创 达梦8 分析sqllog的一个实用脚本

达梦数据库跟ORACLE一样,有AWR报告功能模块用于DBA调优参考。但在实际应用中发现达梦的AWR功能存在诸多问题,原厂工程师答复正在开发中目前不要使用该功能。那么怎么分析SQL呢?如果数据库安装时打开了sqllog功能(SVR_LOG=1),那么下面的实用脚本或许能带来一些帮助。

2023-12-24 08:45:39 609 3

原创 达梦8 异步备库的应用测试

lsn永远落后于主库。数据在每次刷新触发时落后主库10分钟(ARCH_SEND_DELAY),下次刷新前落后主库11分钟(ARCH_SEND_DELAY + FREQ_MINUTE_INTERVAL )主库则首先需要在dm.ini文件中设置TIMER_INI=1,然后在dmarch.ini文件中添加异步归档路径和参数,最后在dmtimer.ini文件中定义日志发送策略。主库根据FREQ_MINUTE_INTERVAL的定义的频率发送日志到异步备库,每次发送ARCH_SEND_DELAY之前的日志。

2023-11-05 11:19:20 189

原创 达梦8 使用并行提高收集统计信息的速度

不过通过本次测试证明并行参数是起作用的。相信在拥有多颗CPU的机器上是可以提高性能的。单位600G数据库收集统计信息用了一天时间还没结束,在家测试一下是否可以设置并行度。分析原因是我的笔记本虚拟机只有1C,并行job需要拆分任务再合并,有一些代价。通过测试发现,我笔记本电脑的虚拟机上设置并行度反而降低性能。

2023-10-15 20:56:33 329

原创 达梦8 基于传输层的 SSL 协议通信加密降低性能0%至18%不等

计算密集型应用反而提高了1%,考虑到误差可以任务没有性能下降。可以得出结论:采用基于传输层的 SSL 协议通讯加密,不同应用场景性能会下降0%至18%不等。编写测试脚本,循环建立100个到远程数据库的sql会话,每个会话插入1行数据并执行统计查询。编写测试脚本,循环建立1000个到远程数据库的sql会话,每个会话插入1行数据。如上可见,向远程数据库顺序建立1000个会话并插入测试数据共耗时48秒。将ENABLE_ENCRYPT参数设置为1,执行测试脚本。本文测试基于传输层的 SSL 协议加密对性能的影响。

2023-07-09 19:16:53 659

原创 达梦8 报错 [-8117]:Waiting for the archive log to flush, please retry again later.

备份时报错:[-8117]:Waiting for the archive log to flush, please retry again later.还有一个经常遇到的报错:archive log collected not consecutive。解决方法:先执行checkpoint(100)主动刷新检查点。同样可以通过checkpoint(100)解决。

2023-06-24 11:44:14 358

原创 达梦8 LENGTH_IN_CHAR(按字符计算长度)选项的作用

当建库时LENGTH_IN_CHAR选项为默认N时,表字段定义代表字节长度。当LENGTH_IN_CHAR选项为Y时,表字段定义为n(GB18030字符集时n=2)倍字节长度,但最大存储长度不能超过8188个字节。

2023-06-18 17:31:26 4579

原创 达梦8 通过外部表结合SHELL脚本监控服务器文件系统使用率

我们知道v$systeminfo视图可以查看服务器的资源使用情况,比如内存、CPU、磁盘的容量和使用量。可惜只能查看磁盘的总容量,无法显示每个卷和文件系统的明细情况。我们可以通过数据库外部表结合SHELL脚本实现此功能。5、从数据库查询文件系统使用情况。2、将脚本加入crontab。3、创建外部表控制文件。

2023-06-06 21:53:05 269

原创 达梦8 如何为SYSDBA用户修改PASSWORD_LIFE_TIME

修改SYSDBA用户的PASSWORD_LIFE_TIME之前需要先将PASSWORD_GRACE_TIME默认的0修改。系统为新创建的LIU用户默认赋予了10天宽限期,而SYSDBA用户则是无限期(0)。下面修改一下系统时间,将时间修改为30天后,使之超过PASSWORD_LIFE_TIME,但在宽限期内。因此我们可以先修改SYSDBA的PASSWORD_GRACE_TIME,再修改PASSWORD_LIFE_TIME。这时LIU用户和SYSDBA一样,登录时系统不再提示异常,但后续执行命令宣告过期。

2023-05-21 21:28:32 3111

原创 达梦8 如何获得数据库中所有建表语句

我们知道在ORACLE中可以用数据泵导出(expdp),然后在测试库执行导入(impdp)。impdp命令有个选项:sqlfile=,这时并不真的导入,而是产生建库语句。很可惜达梦中没有这项功能。不过有一个与ORACLE兼容的功能dbms_metadata包。同理,可以获得约束、trigger、序列、package...等对象的创建语句。

2023-05-21 12:24:27 1656

原创 达梦8 字符串结尾空格参数SPACE_COMPARE_MODE和BLANK_PAD_MODE参数的区别

这时候无论SPACE_COMPARE_MODE是0还是1,查询语句中都会比较字符串后缀空格。BLANK_PAD_MODE=1代表和ORACLE一样识别字符串尾部空格。BLANK_PAD_MODE=0代表达梦模式,即有可能识别字符串尾部空格。BLANK_PAD_MODE是库安装选项,它的级别最高。SPACE_COMPARE_MODE为1。插入字符串时如果带入了空格,不忽略。BLANK_PAD_MODE为0。BLANK_PAD_MODE为0。BLANK_PAD_MODE为1。BLANK_PAD_MODE为1。

2023-05-10 22:19:18 1887

原创 达梦8在linux里的内存分配过程

达梦8在linux里的内存分配过程

2023-02-11 21:16:24 873

原创 达梦8 查找丢失的归档日志

如果归档日志是曾经不小心删除的,我们反复执行checkpoint(100),结果备份还是失败,可能到最后开始怀疑人生。如果是ORACLE数据库,它的归档日志文件名字是按照sequence排序的。所以可以肉眼发现哪个中间的文件丢失了。但达梦的归档日志是按照日期时间排序。我们无法知道哪个时间段有没有归档产生。其实在ORACLE中还可以通过rman命令执行crosscheck archivelog;list expired archivelog ;快速地定位出被误删的归档。但是在达梦目前版本中我还没有发现

2023-02-11 11:12:28 386

原创 达梦8 闪回查询和实现机制(干货)

可以通过“select * from 表名 WHEN TIMESTAMP ' 时间'”查询过去某一个时点的数据。如果时间点不明确,可以查询V$PURGE_PSEG_TAB视图查看曾经修改某表的事务号,再通V$PSEG_COMMIT_TRX视图或者V$SQL_HISTORY视图查询事务提交时间。设置ENABLE_FLASHBACK 为 1 后,才能使用闪回查询。ENABLE_FLASHBACK 等于 0时系统照样会保存回滚段信息, V$PURGE、V$PURGE_PSEG_TAB、V$PSEG_COMMIT

2023-01-15 20:41:19 1650

原创 达梦8 查找丢失的归档日志

达梦8查找缺失的和没有备份的归档日志

2023-01-13 08:37:29 476

原创 达梦8 一场误会 原来是INJECT HINT搞的GUI

果真如此。原来上次做实验写的HINT注入还留着呢!当执行这条语句时系统会隐含增加HINT:NO_INDEX(TEST,IND_TEST),即不使用IND_TEST索引。但是不使用IND_TEST,不代表不能使用IND_TEST2。系统在没有统计信息的时候默认选择索引路径。哈哈,一场误会。

2023-01-07 18:10:59 382 1

原创 达梦8 不要用v$sqltext视图统计sql语句的执行次数

方法3完美地解决了超长SQL定位的问题,但可惜无法按照时间范围查找。v$sql_stat_history和v$sqltext视图都没有时间字段。如果要统计一个时间段内某语句的执行次数就只能查询v$sql_history视图了。

2023-01-01 09:09:41 863

原创 达梦8 查找系统中有没有使用绑定变量的语句

每条执行的语句都要先经过解析。在解析过程中需要进行语法和语意解析,再生成执行计划,这个过程叫做硬解析,是非常耗时的过程。如果直接从库缓存中找到已经解析过的语句的过程称为软解析。因此应该尽可能地减少SQL语句的硬解析次数。生产系统中由于历史原因可能存在大量没有使用绑定变量的SQL。通过如下语句可以快速找到此类SQL:

2022-12-26 10:57:01 604 1

原创 达梦8 SQL缓冲区的优化

以上通过绑定变量方式完美的解决了问题,大幅提高了速度。如果遇到实在不能改写绑定变量的时候只能通过sp_set_para_value命令修改CACHE_POOL_SIZE参数扩大缓冲区尺寸了。

2022-12-25 17:49:53 1766 2

原创 达梦8 执行语句报错:[-6811] 结果集总数超过限制

查找达梦文档发现有两个参数可能与本错误相关RESULT_SET_LIMIT :一次请求可以生成的结果集最大个数SESSION_RESULT_SET_LIMIT:会话上结果集个数的上限

2022-12-25 14:28:04 2939

原创 达梦8 查看SQL解析命中率的两个方法

v$cacheitem视图收录了系统中所有缓冲项的相关信息。TYPE$='PLN'代表执行计划。N_HIT代表节点命中次数。注意:这两种方法查出的结果并不总是一样。方法1查出的软解析和硬解析次数比方法2多一些。原因可能是某些执行计划没有收录到v$cacheitem中,或者是v$sysstat统计多了。

2022-12-25 09:55:59 693

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除