Chinaunix首页 | 论坛 | 博客
  • 博客访问: 245820
  • 博文数量: 52
  • 博客积分: 2263
  • 博客等级: 大尉
  • 技术积分: 695
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-28 12:00
文章分类

全部博文(52)

文章存档

2010年(2)

2009年(20)

2008年(30)

分类:

2009-03-03 11:57:58

参照官方手册和自己在pg上做的实验,记录下pg(FREEBSD)的参数调优过程:

   1. postgresql.conf是pg的主要配置文件.
         
        调优主要分几个方面:
            优化db,从表结构,sql语句,分表,分区,分库,物理设备,网络设备....等等等等各个方面
            进行优化,从量变到质变

        表结构方面:
            从 看到一个关于散列算法来优化索引的文章.给了我启发.
        过程:
           有一个列的定义很长,比如char(200),又或者是text类型,等等等.那里面肯定要存储
           很长的字符串,可能是url,可能是地址,可能是.....

           那么,select 此字段的时候,就要花费很多磁盘io.因为:字段长度大,读取的文件系统的块就
           多,那么磁盘的读取速度就慢.系统的响应时间就长.效率就慢...................

           filesystem的block大小现在要改的话,没人肯冒着系统崩溃的危险来做这个事情

           那么只能从字段的长度上着手.字段的内容又不可以更改,那能不能转换一下呢?一下就想到md5

           在往字段里存入内容之前.(这里是生成一个唯一性索引)做一个散列运算,即用md5函数.
                     create unique index on urls using btree(md5(url));
          
           那么最终存入的内容就是比较短小的md5值.索引的大小减少2/3.
           (省了很多内存啊!)

           postgresql 里头 md5()函数的定义,它返回的是 text 类型,
           是用hex转码后的文本流,其宽度是 32 bytes,也是很大.
       
                要是转换为2进制的格式,其大小还会小很多

           那以后读取的时候,加一个md5和decode再转换回来就ok.

                这种做法,典型的以cpu换io.可以一试!

           内存:
                
                 在sysctl.conf中增加:(2G内存)
                 kern.ipc.shmall=1*1024*1024*1024/4096
                                                 //内存是分页的,以页为单位;每页大小为4K
                                                 //取物理内存的一半大小 再 除以4K
                                                 //共享内存总大小...单位:页 注:4K每页
                 kern.ipc.shmmax=1*1024*1024*1024//共享内存能使用的最大量...单位:bytes
                                                 //和上个选项大小一样,只是单位不同
                 kern.ipc.semmap=4096            //定义共享内存段大小...单位:bytes
           内核:
                 把共享内存装载到 RAM 里,避免他们被交换到交换分区中:
                      sysctl 设置 kern.ipc.shm_use_phys=1



           日志:



         
阅读(1391) | 评论(0) | 转发(0) |
0

上一篇:apache22 在freebsd下的 问题

下一篇:pgsql管理

给主人留下些什么吧!~~