
postgresql_优化
文章平均质量分 71
rudy_gao
这个作者很懒,什么都没留下…
展开
-
checkpoint性能测试
--checkpoint各参数的值checkpoint_segments 最多的wal log数量,到达后会激发checkpoint,通常设定在30就好checkpoint_timeout 一般设置15-20分钟,常的可以设定1天也没关系checkpoint_completion_target 这个保持不动就好。内建是0.5,意思就是每个checkpoint预计在下个checkpoint完成原创 2015-10-16 15:48:36 · 4736 阅读 · 0 评论 -
postgresql 优化之--不会使用索引
--原始表结构如下:postgres=# \d+ postgres_s1_log Table "public.postgres_s1_log" Column | Type | Modifiers | Storage | Stats原创 2015-12-29 18:12:54 · 6247 阅读 · 0 评论 -
postgresql 字符集server_encoding变更
--今天在使用postgres_fdw做远端数据库转储时,发现本地所使用的字符集与远端是不同的,造成插入数据错误postgres=# insert into t select * from for_t; ERROR: character with byte sequence 0xe7 0xa6 0xb4 in encoding "UTF8" has no equivalent in原创 2015-11-30 14:56:14 · 11026 阅读 · 0 评论 -
postgresql cluster和correlation
--今天查看pg_statsinfo报告时发现有如下警告,说明字段物理行序和逻辑行序相关不大correlation of the clustered table fell below threshold in snapshot '2015-11-30 08:30:00' --- 't.order_num', 44.01 % (threshold = 70 %)correlation原创 2015-11-30 14:54:35 · 1389 阅读 · 0 评论 -
postgresql dead_tuple和live_tuple
--PG并没有像Oracle那样的undo来存放旧版本;而是将旧版本直接存放于relation文件中。那么带来的问题就是dead tuple过多,导致relation文件不断增大而带来空间膨胀问题。--为了解决这个问题,PG中引入了vacuum后台进程,专门来清理这些dead tuple,并回缩空间--创建测试数据postgres=# create table t (id in原创 2015-11-30 14:58:05 · 4453 阅读 · 0 评论 -
postgresql 临时表空间及注意事项
--查看数据库临时表空间位置--temp_tablespaces是表空间名称的列表,当列表中有一个以上名称时, PostgreSQL 每次临时对象被创建时选择一个列表中的随机数;--除了在一个事务中之外,先后创建临时对象放置在列表连续的表空间中。 --如果列表中选定的元素是一个空字符串, PostgreSQL 会自动使用当前数据库的缺省表空间 select * from pg_settin原创 2015-12-18 15:23:41 · 7817 阅读 · 0 评论 -
postgresql 性能问题诊断总结
--如果系统出现访问缓慢,首先可以通过zabbix查看系统中的数据库连接数,cpu使用率,内存使用率,swap使用率,以及系统io吞吐是不是有明显的抖动--如果数据库连接数突增,可能是系统访问量突然增大,更有可能是数据库执行一个或多个sql,造成资源争用,数据库处理速度跟不上向数据库发送请求的速度--如果cpu空增,内存变动不大,可能是数据库在进行大量的计算,比如sql的聚合操作--如原创 2015-12-18 15:32:18 · 5821 阅读 · 1 评论 -
mysql profile及其对应表使用
--mysql的profile可用于查看一个sql的具体消耗show profile all for query 1\G;--profiling has a default value of 0 (OFF)mysql> SELECT @@profiling;+-------------+| @@profiling |+-------------+| 0 |+-原创 2016-01-04 10:17:02 · 1181 阅读 · 0 评论 -
postgresql 分区与优化
--对于分区表constraint_exclusion 这个参数需要配置为partition或onpostgres=# show constraint_exclusion ; constraint_exclusion ---------------------- partition --创建父子表, 用于存储分区数据create table t(id int primary原创 2016-01-08 09:40:22 · 1686 阅读 · 0 评论 -
技术的争论--人决定技术
技术的争论假如现在需要对user表的username字段和last_update_time字段建立组合索引,有如下两种方案方案A:index(username,last_update_time)方案B:index(last_update_time,username)到底哪种好呢?select something from users where user原创 2016-01-26 16:26:21 · 589 阅读 · 0 评论 -
PostgreSQL 9.5 BRIN 索引
以下内容转载自:PostgreSQL 9.5 new feature - BRIN (block range index) indexPostgreSQL 9.5引入的一个全新的索引访问方法BRIN(block range index),这个索引存储了表的连续数据块区间以及对应的数据取值范围。比如一张表有1000个数据块,我们建议一个BRIN在ID(假设这个表有ID字段)上的索引。转载 2016-01-11 16:13:45 · 3309 阅读 · 0 评论 -
postgresql 定时收集表和索引统计信息
--由于pg中表和索引的信息收集都是基于时间点的,对于以往的信息无法与现在的信息进行对比,故写下此工具进行统计信息收集--创建数据信息的schemacreate schema db_stat;--创建收集信息的基础表create table db_stat.snapshot_pg_stat_all_indexes(relid int,indexrelid int,schemaname原创 2016-02-26 09:33:41 · 3198 阅读 · 0 评论 -
PgSQL · 特性分析 · full page write 机制
PG默认每个page的大小为8K,PG数据页写入是以page为单位,但是在断电等情况下,操作系统往往不能保证单个page原子地写入磁盘,这样就极有可能导致部分数据块只写到4K(操作系统是一般以4K为单位),这些“部分写”的页面包含新旧数据的混合。在崩溃后的恢复期间,xlog 里面存储的记录变化信息不够完整,无法完全恢复该页。PG为了解决这类问题,full_page_write机制孕育而生。什么转载 2015-11-26 09:47:14 · 2080 阅读 · 0 评论 -
PostgreSQL缓存
目录[-]pg_buffercachepgfincorepg_prewarmdstatLinux ftools使用pg_prewarm预加载关系/索引:pgfincore 输出: 怎样刷新在操作系统缓存中的关系/索引 ?使用pg_prewarm的range功能预加载随机块.缓存.... !!, 它很难在一篇文章中解释清楚。但是我会努力分享转载 2015-10-15 17:20:16 · 7151 阅读 · 1 评论 -
利用pg_trgm的gist和gin索引加速字符匹配查询
pg_trgm是用来做相似度匹配的,在一些情况下也可以拿来代替全文检索做字符匹配。从大量数据中通过字符串的匹配查找数据的关键是索引,对字符串的精确相等匹配,前缀匹配(like 'x%')和后缀匹配(like '%x')可以使用btree索引,对中缀匹配(like '%x%')和正则表达式匹配就可以用pg_trgm的索引了。下面用一个例子说明一下。1.环境CentOS 6.5转载 2015-10-19 11:12:45 · 5080 阅读 · 0 评论 -
postgresql的update锁等待
--当update语句执行时,如果其可以获得锁其会首先获得一个排它锁 ExclusiveLock--在session 1 中 开启一个事务postgres=# begin;BEGINpostgres=# update t set user_name='test rudy' where id=1;--在session 2 中进行查询postgres=# SELECT locktype原创 2015-10-19 16:55:11 · 7406 阅读 · 0 评论 -
POSTGRESQL区域设置对索引和排序的影响
--区域支持是在使用 initdb 创建一个数据库集群的时候自动初始化的,但可在创建数据库时单独指定--区域设置特别影响下面的 SQL 特性* 查询中使用 ORDER BY 或者对文本数据的标准比较操作符进行排序* upper, lower 和 initcap 函数* 模式匹配运算符(LIKE, SIMILAR TO, 以及 POSIX-风格的正则表达式); 区域影响大原创 2015-10-19 10:32:48 · 1944 阅读 · 0 评论 -
sysbench测试mysql与postgresql
--安装yum包 yum -y install bzr libtool --对压缩包进行解--注意不要在mysql的官网下载,因为其只支持mysql不支持pghttps://github.com/akopytov/sysbench/tree/0.4tar zxf sysbench-0.4.12-1.1.tgz mv sysbench-0.4.12-1.1 sysbenchunz原创 2015-10-20 15:19:42 · 2916 阅读 · 0 评论 -
PostgreSQL cluster table using index
PostgreSQL CLUSTER意在将表按照索引的顺序排布. 可以通过ctid来观察这个排布, 或者通过pg_stats.correlation来观察这个排布. 下面来举个例子 : 创建测试表 : digoal=> create table test (id int, val numeric);CREATE TABLE插入测试数据 : dig转载 2015-10-20 15:57:42 · 1308 阅读 · 0 评论 -
修改表结构DDL语句与锁
--当pg开启一个事务,执行dml操作时,如果另一个事务要修改表结构,其不得不等待--session1 中执行dmlpostgres=# begin;BEGINpostgres=# select pg_backend_pid(); pg_backend_pid ---------------- 4144(1 row)postgres=原创 2015-10-22 11:55:25 · 2779 阅读 · 0 评论 -
不要滥用UNLOGGED table 和 hash index
注意PostgreSQL的unlogged table是不记录xlog的,所以在备库上没有unlogged table的数据记录。同时,数据库在进入恢复状态时,为了保证数据的一致性,postgresql会自动清除unlogged table的数据文件。那么问题来了,万一你不小心误创建了unlogged table,你可能一开始会没有感知,但是一旦发生以下情况,你会发现数据不见了。转载 2015-10-23 11:12:27 · 1056 阅读 · 0 评论 -
PostgreSQL数据库 OLTP高并发请求性能优化
在多核系统中,一般TPS会随并发数的增加而提升,但是当并发数超过一定的数值(如CPU核数的2到3倍以后),性能开始下降,并发数越高,下降越严重。例子:更新500万记录表中的1条随机记录。开8000个并发。create table test_8000 (id int primary key, cnt int default 0);insert into test_8000 s转载 2015-10-23 11:51:14 · 1762 阅读 · 0 评论 -
PostgreSQL 9.4版本的物化视图更新
postgresql的9.4版本出来有一段时间了,也更新了很多内容,其中之一是比较感兴趣的物化视图的更新,对比原先的物化视图语法,新增了一个CONCURRENTLY参数。 一、新语法:--创建语法,未有更新CREATE MATERIALIZED VIEW table_name [ (column_name [, ...] ) ] [ WITH ( storage_p转载 2015-10-22 16:47:47 · 3694 阅读 · 0 评论 -
postgresql 检查点优化
检查点,通俗的理解就是数据库处于数据一致性,完整性的点。因此在这个点之前提交的事务确保数据已经写入数据文件,事务状态已经写入pg_clog文件。通常创建检查点会需要一个漫长的过程,那么怎么保证数据的一致性和完整性呢?从数据恢复(XLOG)的角度来看,检查点在XLOG文件中分为两个位置,一个是逻辑位置,一个是物理位置。逻辑位置即开始位置,也是一致性位置,在这个位置之前转载 2015-10-23 14:02:47 · 1895 阅读 · 1 评论 -
PostgreSQL 秒杀场景优化
秒杀场景的典型瓶颈在于对同一条记录的多次更新请求,然后只有一个或者少量请求是成功的,其他请求是以失败或更新不到告终。例如,Iphone的1元秒杀,如果我只放出1台Iphone,我们把它看成一条记录,秒杀开始后,谁先抢到(更新这条记录的锁),谁就算秒杀成功。例如:使用一个标记位来表示这条记录是否已经被更新,或者记录更新的次数(几台Iphone)。update tbl se转载 2015-10-23 10:56:29 · 741 阅读 · 0 评论 -
nulls first & nulls last 对索引影响
-- 当我们需要排序字段时,比如order by name,如果name字段定义时没有not null时,就有可能涉及到null值的排序-- 如果不注意,可能会造成隐藏的bug,pg默认null是无穷大,在升序时排在最后面,当然在排序时也可以指定 nulls first 或 nulls last-- 具体使用方法在此不在复述,本文主要是讲的是在创建索引时指定 nulls first 或 nul原创 2016-05-04 14:18:10 · 1796 阅读 · 0 评论