Pavel Trukhanov, "Monitorando Postgres por USE e RED"
Existem duas metodologias de monitoramento de desempenho: USE (Utilização, Saturation, Errors) por Brendan Gregg e RED (Requests, Errors, Durations) por Tom Wilkie. Na palestra, quero falar sobre como fomos guiados por eles e continuamos a ser guiados quando implementamos o monitoramento Postgres em okmeter.io.
. Okmeter. , , Postgres , . , , , , , USE RED , Postgres.
, . , .
, , , , . - . performance - , , , , .
, , , Postgres – , , . , - , , , . - , . - , , .
USE. , . , , . , , saturation , .
, ? , pg_stat_activity . ? , . , - , . , , . - , - , , .
? «», CPU Usage, , iostat – . , . , , . , , . .
, , , Postgres. , Postgres . . , , . Data Egret. , .
- ?
. . , Postgres , connection connection .
. . , . – - . , , . , , , .
: « ?». , SpinLock - , , , . CPU usage , .
– . , , , , - , , , , - .
? , capacity. 100 %, , , . .
. , . , . . , . , . . .
. - , capacity. , capacity ? . . saturation, . , . , .
Postgres.
pg_stat_activity. - . , . . : 300 connection . , - . , , - .
, . , , . - , , capacity , . . , Postgres max connections.
, state connection, , , idle, . . connection , . - idle in transaction. , , . active, - .
, , . , . ? . , - , . – pool connections, – , , , , . – , . - : locks - .
, , , .
- , , active 5 % connections. 95 % . . , .
, . , connections .
?
, . ? 100 connections, max connections , setting’, . , . , 100 %. , – . - . , . - , - .
saturation, util ? Saturation , utilization 100 % . , , , utilization 100? , .
, , CPU usage , load avarage . , 100 %, saturation . Load avarage — saturation, - . runnable , . . , , , .
, CPU usage . ? . load avarage. Load avarage , . , - . . response .
. - – idle in transaction.
. . - , . saturation .
idle. max connections, . , . -.
, select’ pg_stat_activity connections, waiting try. . . active state, - , -. waiting.
, . utilization connection pool 100 %.
, .
waiting ? . , - saturation , . . stack Postgres, , - - . .
– locks. , lock. , locks - , , connections. , locks.
. . . - lock , .
lock – space , – . , , lock . , , connections, locks, — saturation lock.
Postgres , connection . TCP-. TCP-. Post master . , , , «reset». time wait .
? , connections .
connections .
, connection pool . , , , , . ? - . ? -, . connections 5 000. Postgres . ? - connections. , , .
TCP . time wait, , - Postgres - , .
, connect? postmaster , connections backlog list . , search, backlog 100. . 100 %. – , - – saturation. – .
, backlog , reset.
, . Postgres , TCP «».
RED, USE? DBA, , , , - . , - . - , . . , Postgres .
RED, , , , :
- ,
- ,
- .
Postgres. , . , - . . - , .
rollbacks, , 6 , , , , , search , . . , - .
, RED . , . ? , . , , . , .
queries . - - . 8 , .
, - . . select , .
. , - , . . - . . - . , . . . : « , », , .
, . pg_stat_statements , . . , , . . , . – . . , , - , , . .
slow log. Slow log – durations . , . . , , - , .
, . , - , .
. , - . . , , . – , .
. - .
, , - . - , .
, . , . , , . .
, . USE, RED, ad-hoc , ad-hoc tools - , , , , .
.
Postgres, USE, RED ? . . .
Okmeter, . , - , . , , , , . , - , USE, RED. , . , , , saturation . , , , saturation . , . , - . , , , . , , .
! ! , 4- .
4 – USE RED. , USE, durations. errors . RED , requests durations. - , USE RED . . . - . , , .
– instance.
, ? – . – , requests . .
, !
! . – , - , , . , , . .? . . ?
, . , . , . . , , , , , USE . , , , , , selects, , , requests . , requests .
, , , , ?
. , . , , . , . . , . . . , . - , , . . , queries . - . , .
, , Postgres . , . , .
! , instance Postgres - . , ? , BD .
. – . , , , , , . , , - . , . .
A segunda maneira pela qual lutamos é a otimização. Otimizamos o que fazemos. Efetivamente, o Okmeter faz solicitações a essas visualizações regularmente, mas muito raramente, uma vez por minuto.
Ou seja, não é em tempo real?
É uma questão difícil, o que é tempo real. Vamos discutir isso separadamente. Mas a carga é limitada por quantas solicitações você faz. Esses pedidos não são muito pesados. Existem várias dezenas deles. E mesmo que você os faça em tempo real, mais do que uma vez por minuto, essa carga ainda será bastante limitada. Aqui está um exemplo de quantas consultas são enviadas para o banco de dados. Existem vários milhares deles. Conseqüentemente, mesmo que essas várias dezenas sejam pesquisadas uma vez por segundo, ainda é uma fração.
Ok, obrigado!