- 博客(166)
- 收藏
- 关注
原创 【MySQL数据库中show status和show variables的区别】
在使用MySQL数据库的时候,我们经常使用如下几种类型的SQL去查看参数设置。这两个命令,获取的参数值,在MySQL5.6版本的时候分别来自于如下几个表。在MySQL 5.7.6开始,弃用了这几个INFORMATION_SCHEMA的表,改成了从如下Performance Schema 下的几张表获取,并且引入了show_compatibility_56参数来控制show命令从什么地方获取值。
2025-01-22 02:37:07
332
原创 【在PostgreSQL基础上openGauss新增的一些优化器相关选项】
此参数设置为正数时意为直接将设置的值作为估算limit的行数,为负数时代表使用百分比的形式设置默认的估算值,负数转换为默认百分比,即-5代表5%。enable_change_hjcost 控制优化器在Hash Join代价估算路径选择时,是否使用将内表运行时代价排除在Hash Join节点运行时代价外的估算方式。enable_index_nestloop 控制优化器对内表参数化索引扫描嵌套循环连接规划类型的使用。cost_weight_index 设置index_scan的代价权重。
2025-01-22 00:58:12
180
原创 【PG14对提升嵌套循环连接的性能的优化】
假设y = f(x),memoization意味着我们可以在任何计算中用y替代f(x)。例如,无论你计算多少次UPPER(‘x’),你总会得到’X’。如果这种函数的计算成本很高,并且只有很少的可能输入值,那么维护一个映射所有先前输入值的哈希图并使用它来查找已知(或至少是频繁的)值,而不是再次计算它们,这样的效率会很高。PostgreSQL-14里的这个enable_memoize选项,可以决定是否缓存嵌套循环连接内参数化扫描的结果,这意味着优化器可以用仅取决于计算输入值的缓存值替换任何计算。
2025-01-22 00:57:24
191
原创 【PostgreSQL数据库常用优化器选项及表连接/聚集计算适用场景】
对于hash算法来说,数组的长度肯定是大于group by的字段的distinct值的个数的,且跟这个值应该呈线性关系,group by后面的值越唯一,使用的内存也就越大。需要注意的是,JOIN的顺序很重要,驱动表的记录集一定要小,返回结果集的响应时间是最快的。Hash 聚合是种常用的数据处理算法,他会对如sum,avg,max,min 等group by 操作进行数据的分组和聚合计算,在处理的过程中,会将数据分成多个组,每个组具有相同的分组键,聚合计算会对该组中的数据进行合并计算。
2025-01-22 00:56:42
638
原创 【Oceanbase数据库常用巡检SQL】
创建了租户后,管理员也需要看下整个资源池情况,已经用了多少,还剩多少等。根据这些情况,来给新租户分配资源,或者考虑扩容等。检查所有服务器的状态,包括这个 Server 的 IP 地址和端口号,它隶属于哪个 zone,是否运行 root service 服务,以及当前状态等信息。查看非memstore内存分类情况,按租户和模块(mod_name)区分。查看非memstore内存分类情况,按租户区分。查看集群中的整体资源分配情况,查看memstore的使用情况。统计每台机器上数据盘的使用情况。
2025-01-06 17:27:36
706
原创 【PostgreSQL数据库-Tried to send an out-of-range integer as a 2-byte value: 53568报错】
其实日志的报错部分往上翻,其实也能大致看出这个报错的SQL,涉及到了大量的绑定变量。报错的位置只有一处,如下是42.3.10版本pgjdbc的报错部分,其中,判断条件里Short.MIN_VALUE和Short.MAX_VALUE的值分别为-32768和32767,表示SQL 解析过程中, SQL中的参数的个数最大不超过32767。但其实简单测试下就可以发现,列的长度不够,报的错误和这个是不一样的。
2025-01-06 17:26:40
527
原创 【PostgreSQL数据库备库查询冲突:canceling statement due to conflict with recovery】
有些业务场景,为了分担主库的访问压力,备库(hot_standby=on)常常需要对外提供只读服务。此时备库既要接受并重放通过流协议传过来的wal数据,同时也要对外提供只读查询服务,这两个任务同时进行,有时候会产生冲突。通常情况下,备库如果有有个wal,replay进程在进行wal回放, 回放过程中有query和回放的内容发生了冲突,(通常是备库的慢查询SQL导致)。那么wal回放会进行等待,等待时间取决于max_standby_streaming_delay参数。
2025-01-06 17:25:14
755
原创 【PostgreSQL使用pg_filedump工具解析数据文件以恢复数据】
PostgreSQL数据库里如果只是一般的数据文件损坏,。数据页损坏,可以使用zero_damaged_pages=on来跳过损坏的数据块来读取数据,然后将数据导到新表中,当然,这部分损坏的数据可能找不回来的。,而且数据目录下的某些文件损坏,可能需要结合其他的环境拷贝相应文件尝试是否能拉起数据库,但是如果这种方式也无法拉起库,数据库无法启动了。这种情况我们可能需要通过工具直接从数据文件中读取数据,例如使用Oracle中的ODU等等的工具。
2024-11-21 04:21:51
1060
原创 【SQLite数据库常规使用命令】
之前在做围绕数据库相关的一些小工具的时候,想找一款数据库作为小工具的资料库。需求是:不用复杂的安装,支持简单SQL,空间占用小,操作简单等等。结合着之前接触到的一些研发同事做的产品的使用经验,我想到了这款轻量级的数据库----SQLite。SQLite遵守ACID,它的设计目标是嵌入式的,已经被广泛用于各种嵌入式设备和应用程序中。大多数的操作系统已经预装了SQLite,如果没有,用包管理器装一下sqlite3就可以了。如下是一部分使用SQLite的常规命令,供参考。
2024-09-18 20:32:54
1490
1
原创 【PostgreSQL里的子查询解析】
子查询是一种嵌套在其他SQL查询中的查询方式,也可以称作内查询或嵌套查询。当一个查询是另一个查询的条件时,就称之为子查询。子查询的语法格式与普通查询相同,但其在查询过程中起着临时结果集的作用,为主查询提供所需数据或对检索数据进行进一步的限制。子查询最重要的方面是有所谓的相关子查询和不相关子查询。
2024-09-13 23:04:22
1009
原创 【PostgreSQL-patroni维护命令】
optime/leader是主库最后一次操作后的lsn位置,是持久节点不会因为session到期,删除该key值。1342177280。
2024-09-13 22:52:23
1289
1
原创 【PostgreSQL里的restartpoint重启点】
不知道大家有没有关注过,配置文件里archive_cleanup_command参数的注释部分有着这么一句"command to execute at every restartpoint",意思是在每个restartpoint时执行的命令。提起checkpoint大家可能比较熟悉,对于这个restartpoint,可能有的人就不太了解了。一个restartpoint相当于恢复期间的检查点,并建立恢复可以前滚而无需重新replay整个恢复日志的点。是在PostgreSQL-8.2提交的。
2024-09-13 22:51:15
755
原创 【zabbix监控软件(配置及常用键值)】
z server使用 键值 采集agent数据,保存在 z mysql中,数据会以图谱的形式在web界面展示。当采集到的数据达到触发器的阈值时,会触发报警动作,通过报警媒介给报警接收人发送消息。浏览器访问:http://172.16.0.71/zabbix/主机群组:自带一部分,zabbix原生模板。同类产品:nagios、cacti。五、监控mysql-server。简介:能够部署企业级监控平台。八、部署 z proxy。监控软件–zabbix。密码: zabbix。六、监控nginx状态。
2024-09-13 22:23:48
1174
原创 【PostgreSQL数据库表膨胀的一些原因】
PostgreSQL表膨胀的原因主要有两个:一个是垃圾数据,即dead tuple行数太多未及时清理,导致不能及时提供能重用的空间,二是数据页之间存在空闲空间。
2024-09-13 22:00:50
812
原创 【PostgreSQL里vacuum但是无法回收死元组的原因】
PostgreSQL数据库里的vacuum/autvacuum在我们日长的使用中可能会遇到很多问题,例如vacuum被阻塞,vacuum时间长,vacuum成功执行后,仍旧无法回收死元组等等。,本文主要介绍PostgreSQL的vacuum成功执行后,仍旧无法回收死元组的几种原因。
2024-09-13 21:59:47
790
原创 【GBase 8c V5_3.0.0 分布式数据库常用几个SQL】
以管理员用户 gbase,登录数据库主节点。接数据库,并执行如下 SQL 语句查看连接数。
2024-09-13 21:58:02
903
原创 【GBase 8c V5_3.0.0 分布式部署(单机安装)】
GBase 8c数据库分布式形态采用share nothing的分布式架构,计算节点和存储节点分离。节点间通过高速网络进行通信,所有节点都有主从互备,确保系统的极致高可用。本文主要包含GBase 8c V5_3.0.0 分布式部署(单机安装)的简单流程,供测试。GBase 8c分布式数据库实际包含CN、DN、GTM和HA管理组件,各个组件具体介绍如下:CN:协调器,采用完全对等的部署方式。对外提供接口,负责进行SQL解析和优化、生成执行计划,并协调数据节点进行数据查询和写入。在功能上CN上只存储系统的全局
2024-09-13 21:50:01
1344
1
原创 【PostgreSQL17新特性之-explain命令新增选项】
PostgreSQL17-beta1版本近日发布了,新版本里,explain命令新增了两个选项,分别是MEMORY 和SUMMARY。
2024-05-31 12:37:18
946
转载 【为什么我在 POSTGRESQL 中 COMMIT 很慢?】
原文标题:WHY DO I HAVE A SLOW COMMIT IN POSTGRESQL?原文作者:Laurenz Albe原文地址:https://www.cybertec-postgresql.com/en/why-do-i-have-a-slow-commit-in-postgresql/翻译:阎书利有时,我们的一位客户会查看数据库中最耗时的语句(使用pg_stat_statements或pgBadger),并发现COMMIT排名靠前。
2024-05-31 12:35:57
217
原创 【PostgreSQL17新特性之-COPY FROM的ON_ERROR容错选项】
经过测试,对于copy from的不同错误类型,就算选择了同样的ON_ERROR ignore选项,行为也可能不一样。
2024-05-30 15:23:34
1190
原创 【PostgreSQL17新特性之-冗余IS [NOT] NULL限定符的处理优化】
David Rowley的相关邮件里也强调了:当我们优化Min/Max聚合时,规划器添加的IS NOT NULL qual会使重写的计划忽略NULL,这可能会导致索引选择不佳的问题。在PostgreSQL16版本及以前,就算原本的列上有非空索引,查询条件带有NULL和NOT NULL,也感知不到,依然会去扫描表去评估,增加额外的计划和执行的开销。在执行一个带有IS NOT NULL或者NOT NULL的SQL的时候,通常会对表的每一行,都会进行检查以确保列为空/不为空,这是符合常理的。
2024-05-30 15:21:59
544
原创 【PostgreSQL17新特性之-事务级别超时参数transaction_timeout】
PostgreSQL数据库里有多个和会话相关的参数,PostgreSQL17-beta1版本新增了一个transaction_timeout参数,来限制事务的持续时间。当前的一些和会话相关的超时参数如下。
2024-05-29 18:19:11
1134
原创 【PostgreSQL17新特性之-新增系统视图】
PostgreSQL-17-beta1版本目前已经发布了,每个版本随着功能的增加和一些相关优化,会对部分视图进行调整,以及增加新的视图。目前的PostgreSQL-17-beta1新版本新增了两个视图,分别为pg_wait_events和pg_stat_checkpointer。pg_stat_checkpointer视图包含检查点信息,pg_wait_events 主要包含等待事件的描述。
2024-05-29 18:17:36
1786
原创 【PostgreSQL支持中文的全文检索插件(zhparser)】
PostgreSQL本身是支持全文检索的,提供两个数据类型(tsvector,tsquery),并且通过动态检索自然语言文档的集合,定位到最匹配的查询结果。而一个tsvector的值是唯一分词的分类列表,把一话一句词格式化为不同的词条,在进行分词处理的时候tsvector会自动去掉分词中重复的词条,按照一定的顺序装入。要支持中文的全文检索需要额外的中文分词插件,zhparser就是其中一种,是基于Simple Chinese Word Segmentation(SCWS)中文分词库实现的一个PG扩展。
2024-05-14 17:31:55
3407
原创 【PostgreSQL里的子查询解析】
子查询是一种嵌套在其他SQL查询中的查询方式,也可以称作内查询或嵌套查询。当一个查询是另一个查询的条件时,就称之为子查询。子查询的语法格式与普通查询相同,但其在查询过程中起着临时结果集的作用,为主查询提供所需数据或对检索数据进行进一步的限制。子查询最重要的方面是有所谓的相关子查询和不相关子查询。
2024-05-14 13:36:57
1207
原创 【PostgreSQL里insert on conflict do操作时的冲突报错分析】
最近在巡检PostgreSQL的数据库的时候,发现部分数据库里存在大量的如下报错。
2024-04-16 15:25:14
2281
1
翻译 【[译]简述PostgreSQL角色和权限】
PostgreSQL中的PUBLIC角色是一个特殊的角色,它为系统中的每个角色授予特权。它就像一个默认组,指示所有角色,甚至是后来创建的角色。它确保所有角色都有权访问某些特权。默认情况下,所有其他角色都会自动授予PUBLIC成员资格,并继承其特权。在PostgreSQL 15之前,每个用户都对公共模式拥有完全的权限(创建/使用),所有用户共享该权限。然而,从PostgreSQL 15开始,用户不再能够在公共模式中创建任何对象。此更改适用于代表所有用户的公共角色。
2024-04-11 16:14:26
352
原创 【PostgreSQL autovacuum清理死元组的相关优化】
如果有未提交的预定义语句,它们会阻止移除死元组。需要使用 COMMIT PREPARED或ROLLBACK PREPARED提交或回滚这些语句。//查询未提交的预定义语句的SQL如下。
2024-04-09 15:14:55
1348
原创 【PostgreSQL的指标采集工具--pgmetrics】
pgmetrics是用go语言写的一款PostgreSQL的健康监控指标采集软件。可以连接到数据库,获取当前数据库的相关信息,如果连接的是本地数据库,则同时会采集服务器的状态信息。可以把采集的结果以json或者text或者csv的形式存储。
2024-03-20 10:06:01
460
1
原创 【PostgreSQL里pg_filenode.map文件的意义】
通常情况下,PostgreSQL中每张表在磁盘上都有与之相关的文件,而这些文件的名字便是relfilenode,我们可以通过pg_class的relfilenode字段去查询。对于一张普通表,其relfilenode和oid默认是一样的。系统表有的也是。但当我们对该表进行了例如vacuum full、truncate之类的操作,表重建后,那么relfilenode便会发生变化。
2024-03-19 09:25:43
834
原创 【PostgreSQL的变长字段数据超过多少会写入到TOSAST表】
通常PostgreSQL里如果一个元祖的变长字段的数据量,超过2KB,则PostgreSQL会尝试进行压缩,把元组控制在2KB之内,如果不能满足2KB之内的需求,就需要独立的toast表来存储了。
2024-03-11 08:55:52
618
原创 【PostgreSQL实现psql连接时候提示用户的密码有效时间】
我这里写了两种,一种是只显示查看自己登陆的用户的有效期剩余时间,一种是一并显示数据库里所有的设置了有效期的用户的剩余可使用天数,以及打印出剩余时间小于七天甚至已经过期的用户。首先是涉及到的判断是否需要修改密码和有效期的查询SQL,这里根据距离过期前7天为标准作为是否需要修改密码的提示。2.一并显示数据库里所有的设置了有效期的用户的剩余可使用天数,以及打印出剩余时间小于七天甚至已经过期的用户。函数需要在所有的数据库中创建,否则psql登陆会有如下的warning,但不影响使用。更改完之后重启数据库。
2024-02-21 09:09:26
993
原创 PostgreSQL限制密码的有效期(每次增加180天)
创建用户时,可以使用如下语句,自动在当前时间的基础上增加180天,作为这个用户密码的有效时间。等到密码到期后或者临近的时候,可以使用SQL修改用户密码,并且重新定义密码的有效期。(也可以直接指定时间,下面方法是为了不用自己算增加180天的天数)把生成的SQL粘贴执行。可以通过pg_roles这个视图查看用户的密码有效时间。
2024-02-20 09:01:23
2145
原创 PostgreSQL使用session_exec和file_fdw实现失败次数锁定用户策略
缺陷:实测发现锁用户后,进去解锁特定用户。只能允许一次登陆,应该再次登陆的时候,触发函数,把之前的日志里的错误登陆的信息也计算到登录次数里了。需要删除对应的pg_log,才能使foreign table信息清理掉,来重制该用户的密码错误记录。解锁同时需要删除pg_log下csv文件里的对应有改用户登陆失败的日志记录,重制密码登录错误的记录,否则可能会重复计算之前的错误登陆记录。用户是否被锁/是否允许登陆,可以查看pg_roles系统视图里的rolcanlogin字段。使用如下语句,可以查询登陆失败的记录。
2024-02-19 16:46:10
1428
1
原创 PostgreSQL里实现计算多个数字的排列组合
在进行排列组合的时候,每一次需要知道是否有重复的值,并过滤出已经排列过的值。这个可以创建支持可变参数的函数来实现。下边的函数用到了聚合判断,并且可变参数使用variadic标记的数组。然后下边使用创建的判断是否有重复数据的函数以及使用SQL实现获取所有的排列组合。根据4的阶乘可以得到,总共应该有24种,阶乘可以使用factorial函数。然后是如何使用这个函数结合查询语句对一组数据进行排列组合。例如,一张表里有1234这四个值。想使用四个值做排列组合。先创建一个测试的表,里边存放要进行排列组合的数据。
2024-02-19 09:01:15
749
原创 【PostgreSQL灵活使用psql执行SQL的一些方式】
可以不进入数据库,在命令行,使用psql 的-c选项跟上需要执行的SQL。来获取SQL的执行结果可以使用psql的选项对查询结果进行一些处理。
2024-02-01 16:44:40
2168
pgxmaster-sqlchecker
2023-04-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人