Postgres调试

        级联删除表     truncate table tablename_notification_receiver CASCADE;
        pg配置文件/opt/pg/pgdata/postgresql.conf 
        查看活跃sql select * from pg_stat_activity where pid=xx;
        取消正在执行的任务: select pg_cancel_backend(pid) from pg_stat_activity where state='active';
        强制停止并取消正在执行的任务: select pg_terminate_backend(pid) from pg_stat_activity where state='active';
        
        查看正在执行的sql
            SELECT pid,datname,usename,client_addr,application_name,STATE,backend_start,xact_start,xact_stay,query_start,query_stay,REPLACE (query,chr(10),' ') AS query FROM (SELECT pgsa.pid AS pid,pgsa.datname AS datname,pgsa.usename AS usename,pgsa.client_addr client_addr,pgsa.application_name AS application_name,pgsa.STATE AS STATE,pgsa.backend_start AS backend_start,pgsa.xact_start AS xact_start,EXTRACT (epoch FROM (now()-pgsa.xact_start)) AS xact_stay,pgsa.query_start AS query_start,EXTRACT (epoch FROM (now()-pgsa.query_start)) AS query_stay,pgsa.query AS query FROM pg_stat_activity AS pgsa WHERE pgsa.STATE !='idle' AND pgsa.STATE !='idle in transaction' AND pgsa.STATE !='idle in transaction (aborted)') idleconnections ORDER BY query_stay DESC;

        查看进程jc情况  jstat -gcutil pid 

        删除重复数据
            delete from tablename a where a.id <> (select min(t.id) from tablename t where a.role_type_id=t.role_type_id and a.web_resource_id=t.web_resource_id and a.method=t.method);
        更改pg序列起始值 alter sequence name_id_seq restart with 200410;
            /usr/pgsql-10/bin/pg_ctl stop -D /data10/pgdata/
            /usr/pgsql-10/bin/pg_ctl start -D /data10/pgdata/
        导出数据库表
            psql -d dbname -U postgres -W COPY log_operation TO '/tmp/log.csv' WITH csv;

        SELECT pid,STATE,backend_start,xact_start,xact_stay,query_start,query_stay,
        REPLACE ( query, chr( 10 ), ' ' ) AS query 
        FROM (SELECT
        pgsa.pid AS pid,
        pgsa.datname AS datname,
        pgsa.usename AS usename,
        pgsa.client_addr client_addr,
        pgsa.application_name AS application_name,
        pgsa.STATE AS STATE,
        pgsa.backend_start AS backend_start,
        pgsa.xact_start AS xact_start,
        EXTRACT ( epoch FROM ( now( ) - pgsa.xact_start ) ) AS xact_stay,
        pgsa.query_start AS query_start,
        EXTRACT ( epoch FROM ( now( ) - pgsa.query_start ) ) AS query_stay,
        pgsa.query AS query 
        FROM pg_stat_activity AS pgsa WHERE pgsa.STATE != 'idle' 
        AND pgsa.STATE != 'idle in transaction' 
        AND pgsa.STATE != 'idle in transaction (aborted)' ) idleconnections ORDER BY query_stay DESC;

        查询元祖和那些表需要清理 查询当前数据库表已经达到自动清理条件的表及相关信息
            SELECT c.relname 表名,        (current_setting('autovacuum_analyze_threshold')::NUMERIC(12,4))+(current_setting('autovacuum_analyze_scale_factor')::NUMERIC(12,4))*reltuples AS 自动分析阈值,    (current_setting('autovacuum_vacuum_threshold')::NUMERIC(12,4))+(current_setting('autovacuum_vacuum_scale_factor')::NUMERIC(12,4))*reltuples AS 自动清理阈值,
            reltuples::DECIMAL(19,0) 活元组数,
            n_dead_tup::DECIMAL(19,0) 死元组数
            FROM pg_class c 
            LEFT JOIN pg_stat_all_tables d
            ON C.relname = d.relname
            WHERE c.relname LIKE 'tablename%'  AND reltuples>0
            AND n_dead_tup> (current_setting('autovacuum_analyze_threshold')::NUMERIC(12,4))+(current_setting('autovacuum_analyze_scale_factor')::NUMERIC(12,4))*reltuples;    
            
        查询当前正在进行自动清理的表及相关信息
            SELECT c.relname 对象名称,l.pid 进程id,psa.STATE 查询状态,psa.query 执行语句,now()-query_start 持续时间
            FROM pg_locks l INNER JOIN pg_stat_activity psa ON ( psa.pid = l.pid )
            LEFT OUTER JOIN pg_class C ON ( l.relation = C.oid ) 
            WHERE psa.query like 'autovacuum%' and l.fastpath='f' ORDER BY query_start asc;

        数据表收缩
            VACUUM VERBOSE 表名;
            VACUUM VERBOSE ANALYZE 表名;
            select * from pg_stat_progress_vacuum;


        告警分区表添加索引
            insert into public.system_partition_table_info("table_name","idx_key","idx_cols","trigger_func","info_type") values ('alarm_event','ueid','ueid','',1);
            
        复制表结构 CREATE TABLE emp3  (LIKE employee);
        复制表内容 insert into emp4 select * from employee;
        删除索引:drop index if exists indexname;
        查看当前扩展
            psql#\dx
            psql#select * from pg_available_extensions;

        pg内存相关配置项
            max_connections = 1000
            shared_buffers=2GB #--1/4物理内存
            temp_buffers=8MB #--默认值
            work_mem=4MB #--默认值
            wal_buffers=16MB #--with-wal-segsize的默认值
            autovacuum_max_workers = 3 #--默认值
            maintenance_work_mem=2GB  #--vacuum,create index等维护工作内存
            autovacuum_work_mem = 1GB #–autovacuum清理进程,总耗内存:autovacuum_max_workers*autovacuum_work_mem        

      pg配置参数说明参考文档:https://postgresqlco.nf/doc/zh/param/


        pg内存计算公式:max_connections * work_mem + max_connections * temp_buffers +shared_buffers * 2 + autovacuum_max_workers * autovacuum_work_mem + maintenance_work_mem + wal_buffers  + (linux运行最小要求的内存(GB)+ 其它应用内存(GB)) <  服务器物理内存
        监控查看缓存, 可以看到将数据加载至shared_buffers
            #create extension pg_buffercache;
            # SELECT c.relname,pg_size_pretty(count(*) * 8192) as buffered, round(100.0 * count(*) /(SELECT setting FROM pg_settings WHERE name='shared_buffers')::integer,1)AS buffers_percent, round(100.0 * count(*) * 8192 /pg_relation_size(c.oid),1)AS percent_of_relation FROM pg_class c INNER JOIN pg_buffercache b ON b.relfilenode = c.relfilenode INNER JOIN pg_database d ON (b.reldatabase = d.oid AND d.datname = current_database()) GROUP BY c.oid,c.relname ORDER BY 3 DESC LIMIT 10;
            
        使用5433 端口启动数据库时清理共享内存问题
        sudo -u postgres PGPORT=5433 /usr/pgsql-9.4/bin/pg_ctl -D "/data10/pgdata" start -w
        注意:上面这个命令的 -D 参数后面的 "/data10/pgdata" 。这个值在 3061,3062中是 “/data10/pgdata”,但是在 3063中是 "/data/pgdata"。
        如果在使用5433 端口的时候报错了,那么大概率是信号量和共享内存出了问题,需要清理一下共享内存。清理完了共享内存,再执行上面启动数据库的命令。
        semids=$(ipcs -s | grep -E 'postgres' | head -n 15 | awk '{print $1}')
        for semid in ${semids} ; do 
            echo "delete semaphore : [${semid}]"
            ipcrm -S "${semid}"
        done
        shmkeys=$(ipcs -m | grep -E 'postgres' | awk '{print $1}')
        for shmkey in ${shmkeys} ; do 
            echo "delete shared memory : [${shmkey}]"
            ipcrm -M ${shmkey}
        done

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值