postgre调优

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

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

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

      3 那么,select 此字段的时候,就要花费很多磁盘io.因为:字段长度大,读取的文件系统的块就多,那么磁盘的读取速度就慢.系统的响应时间就长.效率就慢, filesystem的block大小现在要改的话,没人肯冒着系统崩溃的危险来做这个事情,那么只能从字段的长度上着手.字段的内容又不可以更改,那能不能转换一下呢?一下就想到md5, 在往字段里存入内容之前.(这里是生成一个唯一性索引)做一个散列运算,即用md5函数.
         create unique index "index_name" 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
原文:
http://blog.chinaunix.net/u2/74570/showart_1849692.html

你可能感兴趣的:(sql,.net,算法,PostgreSQL,FreeBSD)