PostgreSQL explain解析(一): buffers
通过扩展EXPLAIN添加值来描述postgresql数据库中SQL的执行计划每个操作读/写的数据,需要使用ANALYZE参数,从Postgres 13开始,它可以额外报告planner的缓冲区使用情况。默认情况下,BUFFERS是关闭的。在更多的情况下,使用BUFFERS将极大地帮助我们理解内部发生了什么
Oracle迁移到PostgreSQL注意事项: to_date
近年来国家xc的推广,现阶段国产或开源库迁移逐渐列上日程,目前看已大势所趋, 在选择部分国产(基于)或开源数据库里安全健康的开源协议需要考虑, PostgreSQL是功能强大最接近Oracle的并有全球客户经过长期磨炼过生态健全的关系型数据库,最近有一个项目在原有一套Oracle的应用数据迁移到PG后,在两个PG环境中双数据源双写数据时,其中一套PG的数据库入库存在问题
PostgreSQL维护索引相关查询
PostgreSQL 具有一组丰富的索引功能,人们开发数据库一段时间后,当需要对软件架构进行更改时,他们忘记了对以前的索引进行清理。这种方法会造成混乱,有时会因为索引过多而减慢数据库的速度。
PostgreSQL所有历史版本列表(时间)
在Github看到这个项目postgres_all_versions,是Greg Sabino Mullane 开发的一个Perl脚本,可以解析在线Postgresql的官方文档,从中把所有PostgreSQL的版本及新特性变化,生成一个大的html文件。
oracle 如何调用 postgresql中的procedure、function?
在去O的过程中或当前多种数据库并存时,有些存在跨DB的调用,如可以使用gateway,dblink或fdw在oracle和postgresql间跨数据库访问数据,当前有个项目存在2个数据库存储过程的依赖调用,如果从oracle调用postgresql中的存储过程呢?
Linux最佳实践for Postgresql/openGauss
Linux 内核提供了各种可能影响性能的配置选项,为了获得最佳性能,PostgreSQL 数据库取决于正确定义的操作系统参数。操作系统内核参数配置不当可能会导致数据库服务器性能下降与系统稳定。因此,必须根据数据库服务器及其工作负载配置这些参数。就像任何其他数据库一样,PostgreSQL依赖于Linux内核进行最佳配置。
“alter table ” modify column in Oracle、MySQL、PostGreSQL(数据库比较系列十三)
‘alter table’ DDL操作后期运维时比较常规的操作,但在oracle,MySQL,PostGreSQL中行为并不相同,Oracle还是三者中代价最低的,但是在Oracle DBA转向其它数据库运维时,以O的经验维护像MySQL、PostGreSQL时修改列的小动作可能会出现故障,比如空间耗尽、持续时间长、锁、执行计划变等现象。这篇分别测试一下三个数据库在ALTER TABLE modify column上的影响。
浅谈数据库与GPU?
最近有客户咨询数据库可不可以使用GPU (Graphics processing unit)来给数据库负载加速, GPU 是专用的高度并行硬件加速器,最初设计用于加速图像的创建。最近,人们一直在寻找GPU来加速其他工作负载, 对于GPU的非显卡使用场景最火的当属对于虚拟货币的挖矿,
How to trace DB processes system calls using Strace -k
当前数据库种类较多,像oracle等闭源数据库在诊断特殊疑难问题时需要分析内部C函数的call stack, 目前的oradebug short_stack或errorstack,linux系统中的pstack只是dump当前的调用, 还有现在的开源数据库虽然可以查看源代码,但是没法较方便的方法在运行的进程过程中持续跟进多个内部调用的call stack. 增加了故障分析的复杂性和诊断时间, 这里看到了一种使用strace跟踪的方法记录一下。
Language SQL和Plpgsql在Postgresql Functions 的区别
上在一篇中测试看到postgresql中的function相同的逻辑,仅是create function时language在sql和plpgsql不同产生了不同的执行计划, 是因为postgresql是选择了不同的 SQL query “engine”, Postgresql支持多种不同的”runtime engines”执行不同的code,在Postgresql中创建function时语言支持SQL, PL/pgSQL, C ,C,Perl, Python, Ruby, Java 等,这是好多其它数据库不具备的,本篇总结一下在create function是的language在SQL和plpgsql之间的不同。
Postgresql 、openGauss系function函数Volatile 属性索引无法使用
最近的一个从oracle到Openguass的项目迁移时,应用反馈SQL在使用列等值右侧function返回值无法使用索引的问题,当把function换成字面量时可以正常使用索引对象,这个问题对PostgreSQL开发者很重要,因为许多数据库开发人员不知道PostgreSQL函数的Volatility(不稳定性)。每个函数都有一个Volatility分类,可能是VOLATILE、STABLE或IMMUTABLE。VOLATILE是默认值。该问题同样适用于openguass系的package中的function.
multi-version read consistency in Oracle、MySQL、PostGreSQL(数据库比较系列十二)
ANSI/ISO SQL 标准定义了4 种事务隔离级别,对于相同的事务,采用不同的隔离级别分别有不同的结果。这些隔离级别是根据3 个“现象”定义的,在Oracle 中READ COMMITTED 则有得到读一致查询所需的所有属性,在其他数据库中的读READ COMMITTED 可能会有不同的答案, 最近有个客户在测试migrate oracle to postgreSQL测试发现一个批处理的结果并非一致,
VIEW dependencies in Oracle、MySQL、PostGreSQL(数据库比较系列十一)
在有些程序员开发习惯中,喜欢为了应用代码的简洁或复用,而在数据库创建一个复杂关连查询的VIEW,甚至是VIEW套VIEW嵌套使用, 这里就有个问题如果上线后如发现依赖的表字段类型或长度不足时,修复一个view依赖的table列时发现在oracle、mysql、postgresql(本篇等同pg)中有不同的表现, 尤其是使用postgresql的用户需要格外注意, 因为pg 不允许直接修改
列顺序占用存储大小的影响 in Oracle、MySQL、PostGreSQL(数据库比较系列十)
在创建表时,如果相同的列类型,不同表列的顺序是否会影响数据库占用空间大小?使用oracle、mysql或postgresql是不是相同的表现呢? 不是的Postgresql近期发现空间使用会因为columns的顺序而占用不同的大小,当然也和实际的数据有关,简单的测试。
How to Kill session or Cancel SQL query on Oracle , MySQL, PostgreSQL(数据库比较系列八)
数据库维护过程中难免会遇到一些不正常的SQL或会话进程正在占用系统大量资源,临时需要终止查询或kill会话,在Oracle, MySQL, Postgresql数据库中不同的操作。
How to Change in SQL Prompt format in Oracle , MySQL, PostgreSQL(数据库比较系列七)
像UNIX的PS1环境变量可以改变shell操作提示符, 在日常工作环境中可以提升一些效率可以防止一些误操作, 很多年前在看tom关于在练习oracle操作前的一些环境配置像login.sql, 还可以显示当前的用户或数据库名很是欣喜, 下面记录Oracle , MySQL, PostgreSQL三个主流数据库改变命令行提示符的方法。
How to find full table scan SQL in Oracle,MySQL,Postgresql ?(数据库比较系列五)
Queries that do “full table scan” are the ones that don’t use indexes. However, it is more suitable to use a full table scan for small tables, and it will not cause performance problems. Or when the data on the large table is seriously skewed and a large proportion of data records need to be returned, a full table scan will also be better than an index scan.
Oracle、MySQL、PostGreSQL数据库比较系列(四): 可更新VIEW
最近在测试Oracle语法其它数据库的兼容性时,发现postgreq上对于TABLE上创建的简单view操作时还有个Oracle没有的东西:rule, 在openguass 2.1当通过view 做insert操作时会提示下面的错误,但是在postgreSQL 13.2和MoGdb2.1(支持updatable view)上并未报错:
“You need an unconditional ON INSERT DO INSTEAD rule or an INSTEAD OF INSERT trigger.”
Oracle、MySQL、PostGreSQL、SQL Server数据库比较系列(三): VARCHAR与VARCHAR2
Oracle 数据库中的 varchar 和 varchar2 数据类型都用于存储字母数字值的动态长度。但它们之间存在一些差异。varchar 数据类型是适用于所有关系数据库产品(Oracle、MySQL、PostgreSQL 和等)的 ANSI 标准数据类型,存储长度不同数据库差异较大。而 varchar2 数据类型是 Oracle 标准数据类型。VARCHAR是Varchar2的同义词,当我们创建 varchar 数据类型时,Oracle 服务器会在内部自动将 varchar 数据类型转换为 varchar2 数据类型。而部分国产库是VARCHAR2是VARCHAR的同义词。
Oracle、MySQL、PostGreSQL、SQL Server数据库比较系列(二):查询每秒事务数
在做 db benchmarks 时,qps、tps 是衡量数据库性能的关键指标,TPS : Transactions Per Second 是每秒事务数,即数据库服务器在单位时间内处理的事务数。 横向对比计划几类数据库计算tps的方法。