Skip to main content

Enable Expensive Query log in PostgreSQL 9.4

1.       Tool : pg_stat_statements
a.       Enabling: to enable statement log add following entries to postgresql.conf and restart the database.
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all

Login to database as super user and issue following command
CREATE extension pg_stat_statements;

b.      Monitor: Following SQL statement would show all the latest SQL statements executed on database server.  
select * from pg_stat_statements;

c.       Space & Recommendation: as value for pg_stat_statements.max is set to 10000, postgres would keep latest 10,000 SQLs and flush older ones. So the table size would remain in control. This could be enabled on production system as it has les performance cost.

2.       Tool : auto_explain
a.       Enabling: to enable execution plan log add following entries to postgresql.conf and restart the database.
shared_preload_libraries = 'auto_explain'
auto_explain.log_min_duration = '10s'
auto_explain.log_nested_statements = on

b.      Monitor: if query took more than 10 secs, postgres would log the SQL statement with its execution plan in server log file under pg_log.
c       Space & Recommendation: It consumes the space in server log file there is cost for log writing and disk space. We should enable this setting only when there is trouble. Enabling this would provide detail execution plan and query statistics.  

Comments

Popular posts from this blog

Drop all Objects from Schema In Postgres

To Drop all objects from Postgres Schema there could be following two approaches: Drop Schema with cascade all and re-create it again.  In some cases where you dont want to/not allowed to drop and recreate schema, its easy to look for objects on current schema and drop them. following script would help to do so, Create function which would do the task and then drop that function too. --- CREATE OR REPLACE FUNCTION drop_DB_objects() RETURNS VOID AS $$ DECLARE  rd_object RECORD; v_idx_statement VARCHAR(500);   BEGIN ---1. Dropping all stored functions RAISE NOTICE '%', 'Dropping all stored functions...'; FOR rd_object IN ( SELECT format('%I.%I(%s)', ns.nspname, p.proname, oidvectortypes(p.proargtypes)) as functionDef     FROM pg_proc p     INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid)    WHERE ns.nspname = current_schema      AND p.proname <...

Distributed transaction in Oracle ( Over Oracle DBLink)

To fetch the data from one server to and other Oracle server over DBLink, I experienced the following facts of Oracle Distributed transactions: Security issue: -           We cannot create Public synonym for the remote object accessed over Private DBLink of other Database.   -           It’s allowed to create private synonym for remote object, but you cannot grant the access over this synonym to any other schema. If you try to provide the grants to other schema Oracle raises an error:              [ORA-02021: DDL operations are not allowed on a remote database] “In an all you can access remote objects over private DBLink in the same schema where DBLink is created”. Fetching the Ref Cursor at Remote site:                   Let’s say we have two site...

How to Troubleshoot Connectivity Issue with 11gR2 SCAN

I installed the Oracle 11g RAC successfully, But when tried connecting from remote client via SCAN, it used to raise ORA-12537. This is the most common issues that the happens with SCAN listener. And there are few common mistakes that generally  cause this issue. . So, here is how we can troubleshoot the connectivity issues with SCAN, and cases out the possibilities. 1)  Check if Local_listener and remote_listener parameter are set properly on all nodes. 2)  The very common issue is with permissions. SCAN will always be created under grid user (Grid cluserware installation user). Oracle will also create one local listener “LISTENER” during grid infrastructure installation. But if that is not present then always make sure that you create a local listener with grid user. This is required to handover the connection between remote and local listener. 3)  Also “oracle” executable should have given to oracle and grid user i.e. 6751.  Under $ORACLE_HOME/bi...