Managing Resources with PostgreSQL

advertisement
Managing Resources with PostgreSQL
FOSDEM PGDay 2015
Cédric Villemain cedric@2ndQuadrant.fr
30th January 2015
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
1 / 24
Cédric Villemain
PostgreSQL Expertise
Development, Support, Training
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
2 / 24
What resources ?
•
•
•
CPU
RAM
Disk
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
3 / 24
How ?
•
•
with .... Concurrency
with .... Quota or Limit
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
4 / 24
Where ?
Operating System
•
•
•
user process (limits.conf, ...)
container (cgroup, jail, ...)
virtualization (VMWare, Xen, ...)
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
5 / 24
Where ?
PostgreSQL
•
•
•
•
•
•
Main conguration (postgresql.conf)
per object
per role
per database
per role in database
pg_service
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
6 / 24
GUCs with restart
•
•
max_connections
shared_buers
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
7 / 24
GUCs without restart
•
•
•
•
temp_buers
work_mem
synchronous_commit
temp_tablespace
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
8 / 24
More GUCs without restart
•
•
•
temp_le_limit
statement_timeout
lock_timeout
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
9 / 24
Resources per object
•
•
•
•
FUNCTION
ROLE
DATABASE
SYSTEM
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
10 / 24
Function example
ALTER FUNCTION update_datamart()
SET temp_file_limit = -1;
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
11 / 24
Database example
ALTER DATABASE datawarehouse
WITH CONNECTION LIMIT 10; --hard limit
ALTER DATABASE datawarehouse
SET temp_tablespace TO dwh_tblspc;
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
12 / 24
Role example
ALTER ROLE web_user
WITH CONNECTION LIMIT 10; -- hard limit but ...
ALTER ROLE dba
SET work_mem = '128MB';
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
13 / 24
Role in Database example
ALTER ROLE ALL IN DATABASE devel
SET synchronous_commit TO off;
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
14 / 24
System example
ALTER SYSTEM
SET temp_buffers = '12MB';
SELECT pg_reload_conf();
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
15 / 24
Connection Limit
•
•
PostgreSQL ood & DoS
pooling & bouncing
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
16 / 24
PgBouncer
•
•
pool_size = 20
max_client_conn = 2000
my_db = user=web_user host=remote_host pool_size=4
•
bonus: PAUSE / RESUME
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
17 / 24
top-like
•
•
pg_activity (python, system only)
pg_top (C, PostgreSQL extension)
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
18 / 24
pg_proctab
•
•
•
•
pg_cputime()
pg_loadavg()
pg_memusage()
pg_proctab()
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
19 / 24
Execution depends on loadavg
if (select load1<1 from pg_loadavg())
then update_datamart();
end if;
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
20 / 24
What about eective_cache_size ?
select pg_size_pretty(memcached * 4096)
from pg_memusage;
-- don't forget to count shared_buffers
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
21 / 24
Are we writing a lot on disk?
select pg_size_pretty(wchar) as requested_write,
pg_size_pretty(writes) as really_written,
(writes * 100 / wchar) as percent_really_written
from pg_proctab()
where pid = pg_backend_pid())
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
22 / 24
And next ?
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
23 / 24
Questions ?
Now is the time to ask!
Cédric Villemain cedric@2ndQuadrant.fr () Managing Resources with PostgreSQL
30th January 2015
24 / 24
Download