SlideShare uma empresa Scribd logo
Arquitetura de
Memória do
PostgreSQL
Raul Oliveira
Especialista em Bancos de Dados
@rauldoliveira
raul.oliveira@tecnisys.com.br
raul.oliveira@msn.com
✓ Meetup Brasília DataGroup
http://www.meetup.com/pt-BR/Brasilia-DataGroup/
✓ SQLServerDF
http://groups.google.com/group/sqlserverdf
✓ MTAC
http://www.mtac.org.br
Arquitetura de Memoria do PostgreSQL
Agenda da Apresentação
• Memória
• Arquitetura de Memória
• Alocação de memória
• Armazenamento dos dados
• Utilização de memória
Motivadores dessa Palestra
• Entender o Funcionamento
• Facilitar a configuração
• Realizar leitura mais eficientes
dos contadores
• Essa palestra é o resumo de
muitas dúvidas sanadas
• É a causa de muitas outras
dúvidas
• Ainda bem longe de ser
concluído ☺
Subsistemas
Crédito: Amit Tiwari
BUFFER POOL
34%
LATCHING
14%
LOCKING
17%
LOGGING
12%
OTHERS
16%
TRABALHO REAL
7%
Distribuição de Trabalho de um SGBD
BUFFER POOL
LATCHING
LOCKING
LOGGING
OTHERS
TRABALHO REAL
Crédito:Ilya Kosmodemiansky
Hierarquia de Memória
Reg
Cache
L1
Cache L2
Memória
Disco
~3 Ciclos – L1d
0.9 ns
2s
~14 Ciclos
2.8 ns
7s
~240 Ciclos
100 ns
4 min
~3.000 Ciclos SSD
50 – 150 us
1,5 a 4 dias
Como um dado é alocado no PostgreSQL?
postgres
$PGDATA /base /16437
1000
1000.1
1000.2
1000.3
Página de Dados - Block
Relfilenode–1 GB
Page 1
8192 bytes
Page 2
8192 bytes
Page 3
8192 bytes
Página
pd_lsn
pd_checksum
pd_flags pd_lower pd_upper
pd_special
pd_pagesize_
version
pd_prune_
xid
1 2
Tuple 1
Tuple 2
Página (8192 bytes)
Page Header (24 Bytes)
Item ID Data
Tuple Header
Itens
Tuple
header
Special
Tuple
Desc
Tuple
header
Tuple
Desc
Page 131072
8192 bytes
Como o dado é representado:
• Integer / Bigint / Smallint / Tinyint
• Formato nativo C / C++
• Float / Real
• IEEE 754
• Numeric / Decimal
• Decimal ponto-fixo
• Varchar / Varbinary / Text / Blog
• Text ou Toast
• Time / Date / Timestamp
• 32/64-bit integer (Unix Epoch)
Backend – Process Local Memory
Backend – Process Local Memory
Shared Memory
Como que a memória é dividida?
Shared Buffer
Commit Log WAL BufferLocks
Buffer
Descriptors
Proc Array Statistics ...
Backend – Process Local Memory
Work_mem Temp_buffers
Maintenance_
work_mem
Hierarquia de Memória
• 3 Grupos: Assembly*,
Compilador e Processador
• Assembly
• Compilador
• Conditional Move
• Depencias
• ...
• Processador
• Register Rename
• Branch Prediction
• Reorder Buffer...
Reg
Cache
L1
Cache L2
Memória
Disco
Alinhamento
Créditos: Andy Pavlo
CREATE TABLE teste (
id INT PRIMARY KEY,
data TIMESTAMP,
nome CHAR(2),
cep INT
)
32 bits
64 bits word 64 bits word 64 bits word 64 bits word
64 bits
16 bits
32 bits
id data n cep
Reg
Cache
L1
Cache L2
Memória
Disco
64 bits word 64 bits word 64 bits word 64 bits word
id data n cep
Arquitetura de Memoria do PostgreSQL
Testando coisas óbvias
• Vamos fazer alguns select’s simples...
Hierarquia de Memória
1 2 3 4 5 6 7 8 9 10
Reg
Cache
L1
Cache L2
Memória
Disco
5 6 7 8 9 10 1 2 3 4
Hierarquia de Memória
Reg
Cache
L1
Cache L2
Memória
Disco
Como o dado é carregado para a memória?
Disco
Memória
Page CacheShared Memory Shared Buffer
Wal Buffer
CLOG
...
Relfilenode 18000 – 1 GB
8K 8K 8K 8K 8K 8K
Relfilenode 18000.1 – 1 GB
8K 8K 8K 8K 8K 8K
Relfilenode 18001 – 1 GB
8K 8K 8K 8K 8K 8K
8K 8K 8K
Vamos olhar um pouco o SO?
• free
• sar –r
Shared Buffer
8K
Buffer Pool
Buffer Descriptor
Hash Element
hash val Tag + ID hash val Tag + ID
hash val Tag + ID
Hash Table
Bucket [0]
Bucket [1]
...
Hash
Segment
Hash
Segment
Hash
Segment
Buffer
Partition
Buffer
Partition
Buffer Tag: (13348,0,6)
13348: oid
0: Fork Number
6: Block
Fork Number 0: Data File
Fork Number 1: FSM
Fork Number 2: VM
Arquitetura de Memoria do PostgreSQL
Como que o bloco é retirado da memória?
Blk 0
•Cnt: 4
Blk 1
• Cnt: 3
Blk 2
• Cnt: 5
Blk 3
• Cnt: 1
Blk 4
• Cnt: 0
Blk 6
• Cnt: 4
Blk 7
• Cnt: 3
Blk 8
• Cnt: 2
Blk 9
• Cnt: 0
Blk 10
• Cnt: 1
Blk 0
•Cnt: 3
Blk 1
• Cnt: 3
Blk 2
• Cnt: 4
Blk 3
• Cnt: 0
Blk 4
• Cnt: 0
Blk 6
• Cnt: 4
Blk 7
• Cnt: 2
Blk 8
• Cnt: 2
Blk 9
• Cnt: 0
Blk 10
• Cnt: 0
Vamos analisar a Shared Buffer?
Como configurar as áreas de memória?
• Shared Buffer
• Page cache + clock sweep
• Work_mem
• Arquivos temporários
• Planos de Execução
E a minhas queries?
Como Configurar o SO?
• vm.overcommit_memory
• vm.min_free_kbytes
• vm.swappiness
• echo -17 > /proc/12465/oom_adj
Crédito:
Brendan Gregg
Ilya Kosmodemiansky
Vamos dar uma olhada no SO?
• Sar –B
• Sar –W
• iostat
Conclusão
• Tema complexo, sempre há muito a aprender e continuar estudando
e testando é importante
• Vital para o funcionamento correto do SGBD
@rauldoliveira
raul.oliveira@msn.com
Scripts utilizados disponíveis em:
https://github.com/rauldoliveira/PGConf2019
Muito Obrigado!

Mais conteúdo relacionado

Mais procurados (20)

PDF
Introduction to Vacuum Freezing and XID
PGConf APAC
 
PDF
Deep dive into PostgreSQL statistics.
Alexey Lesovsky
 
PDF
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
Nikolay Samokhvalov
 
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
PDF
PostgreSQL WAL for DBAs
PGConf APAC
 
PDF
PgBouncer: Pool, Segurança e Disaster Recovery | Felipe Pereira
PGDay Campinas
 
PDF
Kernel Recipes 2017: Using Linux perf at Netflix
Brendan Gregg
 
PDF
Linux Binary Exploitation - Stack buffer overflow
Angel Boy
 
PDF
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
 
PDF
Linux 4.x Tracing Tools: Using BPF Superpowers
Brendan Gregg
 
PDF
[D26] データハブとしてのPostgreSQL~9.3で進化した外部テーブル~ by Shigeru Hanada
Insight Technology, Inc.
 
PDF
Observability of InfluxDB IOx: Tracing, Metrics and System Tables
InfluxData
 
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
OSA Con 2022 - Arrow in Flight_ New Developments in Data Connectivity - David...
Altinity Ltd
 
PDF
What is new in PostgreSQL 14?
Mydbops
 
PDF
Replicação Lógica no PostgreSQL 10
Euler Taveira
 
PDF
PostgreSQL 공간관리 살펴보기 이근오
PgDay.Seoul
 
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
NTT DATA Technology & Innovation
 
PDF
Introdução a JPA (2010)
Helder da Rocha
 
Introduction to Vacuum Freezing and XID
PGConf APAC
 
Deep dive into PostgreSQL statistics.
Alexey Lesovsky
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
Nikolay Samokhvalov
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
PostgreSQL WAL for DBAs
PGConf APAC
 
PgBouncer: Pool, Segurança e Disaster Recovery | Felipe Pereira
PGDay Campinas
 
Kernel Recipes 2017: Using Linux perf at Netflix
Brendan Gregg
 
Linux Binary Exploitation - Stack buffer overflow
Angel Boy
 
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
 
Linux 4.x Tracing Tools: Using BPF Superpowers
Brendan Gregg
 
[D26] データハブとしてのPostgreSQL~9.3で進化した外部テーブル~ by Shigeru Hanada
Insight Technology, Inc.
 
Observability of InfluxDB IOx: Tracing, Metrics and System Tables
InfluxData
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
OSA Con 2022 - Arrow in Flight_ New Developments in Data Connectivity - David...
Altinity Ltd
 
What is new in PostgreSQL 14?
Mydbops
 
Replicação Lógica no PostgreSQL 10
Euler Taveira
 
PostgreSQL 공간관리 살펴보기 이근오
PgDay.Seoul
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
NTT DATA Technology & Innovation
 
Introdução a JPA (2010)
Helder da Rocha
 

Semelhante a Arquitetura de Memoria do PostgreSQL (20)

PPTX
Monitorando os Recursos e Processos do Servidor, através do Power BI
Sulamita Dantas
 
PPTX
Deep dive de Amazon Redshift
Amazon Web Services LATAM
 
PPTX
Otimizando a performance com in-memory no SQL 2016
Luiz Henrique Garetti Rosário
 
PDF
PostgreSQL Tuning: O elefante mais rápido que um leopardo
elliando dias
 
PPSX
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Zabbix BR
 
PDF
Arquitetura de computadores - memória cache parte 3
AdministradordeRedes
 
PPTX
24HOP Session - Database Administration Strategies
Murilo Miranda
 
PDF
Arquitetura de computadores - memória cache parte 2
AdministradordeRedes
 
PDF
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
Eiti Kimura
 
ODP
Performance em Java
Claudio Miranda
 
PDF
Redis e Estratégias Cache Distribuído
Cristiano Cunha
 
PPTX
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
Fabrício Catae
 
PDF
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Rodrigo Campos
 
PPTX
Exadata - O Todo é maior que a soma das Partes
Luis Marques
 
PDF
Redis um banco chave valor
Kinn Julião
 
PDF
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
Felipe Klerk Signorini
 
PPTX
MEO Cloud - Python Lisbon Meetup
André Cruz
 
PDF
Virtualização de Banco de Dados por Bruno Domingues
Joao Galdino Mello de Souza
 
PDF
Apostila de montagem e manutenção de computadores emi mario gurgel
Pablo Mariano
 
PDF
Imergindo jvm[Apresentação ]
Otávio Santana
 
Monitorando os Recursos e Processos do Servidor, através do Power BI
Sulamita Dantas
 
Deep dive de Amazon Redshift
Amazon Web Services LATAM
 
Otimizando a performance com in-memory no SQL 2016
Luiz Henrique Garetti Rosário
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
elliando dias
 
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Zabbix BR
 
Arquitetura de computadores - memória cache parte 3
AdministradordeRedes
 
24HOP Session - Database Administration Strategies
Murilo Miranda
 
Arquitetura de computadores - memória cache parte 2
AdministradordeRedes
 
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
Eiti Kimura
 
Performance em Java
Claudio Miranda
 
Redis e Estratégias Cache Distribuído
Cristiano Cunha
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
Fabrício Catae
 
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Rodrigo Campos
 
Exadata - O Todo é maior que a soma das Partes
Luis Marques
 
Redis um banco chave valor
Kinn Julião
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
Felipe Klerk Signorini
 
MEO Cloud - Python Lisbon Meetup
André Cruz
 
Virtualização de Banco de Dados por Bruno Domingues
Joao Galdino Mello de Souza
 
Apostila de montagem e manutenção de computadores emi mario gurgel
Pablo Mariano
 
Imergindo jvm[Apresentação ]
Otávio Santana
 
Anúncio

Mais de Raul Oliveira (6)

PDF
Arquitetando Soluções de Dados com PostgreSQL
Raul Oliveira
 
PPTX
ILM com PostgreSQL
Raul Oliveira
 
PPTX
O Guia de Sobrevivência do "DBA Moderno"
Raul Oliveira
 
PPTX
Analise de Performance Usando o SO
Raul Oliveira
 
PPTX
Arquitetura SQL Server
Raul Oliveira
 
PPTX
Cenário das Plataformas de Dados 2017/2018
Raul Oliveira
 
Arquitetando Soluções de Dados com PostgreSQL
Raul Oliveira
 
ILM com PostgreSQL
Raul Oliveira
 
O Guia de Sobrevivência do "DBA Moderno"
Raul Oliveira
 
Analise de Performance Usando o SO
Raul Oliveira
 
Arquitetura SQL Server
Raul Oliveira
 
Cenário das Plataformas de Dados 2017/2018
Raul Oliveira
 
Anúncio

Arquitetura de Memoria do PostgreSQL

  • 2. Raul Oliveira Especialista em Bancos de Dados @rauldoliveira [email protected] [email protected] ✓ Meetup Brasília DataGroup http://www.meetup.com/pt-BR/Brasilia-DataGroup/ ✓ SQLServerDF http://groups.google.com/group/sqlserverdf ✓ MTAC http://www.mtac.org.br
  • 4. Agenda da Apresentação • Memória • Arquitetura de Memória • Alocação de memória • Armazenamento dos dados • Utilização de memória
  • 5. Motivadores dessa Palestra • Entender o Funcionamento • Facilitar a configuração • Realizar leitura mais eficientes dos contadores • Essa palestra é o resumo de muitas dúvidas sanadas • É a causa de muitas outras dúvidas • Ainda bem longe de ser concluído ☺
  • 7. Crédito: Amit Tiwari BUFFER POOL 34% LATCHING 14% LOCKING 17% LOGGING 12% OTHERS 16% TRABALHO REAL 7% Distribuição de Trabalho de um SGBD BUFFER POOL LATCHING LOCKING LOGGING OTHERS TRABALHO REAL
  • 9. Hierarquia de Memória Reg Cache L1 Cache L2 Memória Disco ~3 Ciclos – L1d 0.9 ns 2s ~14 Ciclos 2.8 ns 7s ~240 Ciclos 100 ns 4 min ~3.000 Ciclos SSD 50 – 150 us 1,5 a 4 dias
  • 10. Como um dado é alocado no PostgreSQL? postgres $PGDATA /base /16437 1000 1000.1 1000.2 1000.3
  • 11. Página de Dados - Block Relfilenode–1 GB Page 1 8192 bytes Page 2 8192 bytes Page 3 8192 bytes Página pd_lsn pd_checksum pd_flags pd_lower pd_upper pd_special pd_pagesize_ version pd_prune_ xid 1 2 Tuple 1 Tuple 2 Página (8192 bytes) Page Header (24 Bytes) Item ID Data Tuple Header Itens Tuple header Special Tuple Desc Tuple header Tuple Desc Page 131072 8192 bytes
  • 12. Como o dado é representado: • Integer / Bigint / Smallint / Tinyint • Formato nativo C / C++ • Float / Real • IEEE 754 • Numeric / Decimal • Decimal ponto-fixo • Varchar / Varbinary / Text / Blog • Text ou Toast • Time / Date / Timestamp • 32/64-bit integer (Unix Epoch)
  • 13. Backend – Process Local Memory Backend – Process Local Memory Shared Memory Como que a memória é dividida? Shared Buffer Commit Log WAL BufferLocks Buffer Descriptors Proc Array Statistics ... Backend – Process Local Memory Work_mem Temp_buffers Maintenance_ work_mem
  • 14. Hierarquia de Memória • 3 Grupos: Assembly*, Compilador e Processador • Assembly • Compilador • Conditional Move • Depencias • ... • Processador • Register Rename • Branch Prediction • Reorder Buffer... Reg Cache L1 Cache L2 Memória Disco
  • 15. Alinhamento Créditos: Andy Pavlo CREATE TABLE teste ( id INT PRIMARY KEY, data TIMESTAMP, nome CHAR(2), cep INT ) 32 bits 64 bits word 64 bits word 64 bits word 64 bits word 64 bits 16 bits 32 bits id data n cep Reg Cache L1 Cache L2 Memória Disco 64 bits word 64 bits word 64 bits word 64 bits word id data n cep
  • 17. Testando coisas óbvias • Vamos fazer alguns select’s simples...
  • 18. Hierarquia de Memória 1 2 3 4 5 6 7 8 9 10 Reg Cache L1 Cache L2 Memória Disco 5 6 7 8 9 10 1 2 3 4
  • 20. Como o dado é carregado para a memória? Disco Memória Page CacheShared Memory Shared Buffer Wal Buffer CLOG ... Relfilenode 18000 – 1 GB 8K 8K 8K 8K 8K 8K Relfilenode 18000.1 – 1 GB 8K 8K 8K 8K 8K 8K Relfilenode 18001 – 1 GB 8K 8K 8K 8K 8K 8K 8K 8K 8K
  • 21. Vamos olhar um pouco o SO? • free • sar –r
  • 22. Shared Buffer 8K Buffer Pool Buffer Descriptor Hash Element hash val Tag + ID hash val Tag + ID hash val Tag + ID Hash Table Bucket [0] Bucket [1] ... Hash Segment Hash Segment Hash Segment Buffer Partition Buffer Partition Buffer Tag: (13348,0,6) 13348: oid 0: Fork Number 6: Block Fork Number 0: Data File Fork Number 1: FSM Fork Number 2: VM
  • 24. Como que o bloco é retirado da memória? Blk 0 •Cnt: 4 Blk 1 • Cnt: 3 Blk 2 • Cnt: 5 Blk 3 • Cnt: 1 Blk 4 • Cnt: 0 Blk 6 • Cnt: 4 Blk 7 • Cnt: 3 Blk 8 • Cnt: 2 Blk 9 • Cnt: 0 Blk 10 • Cnt: 1 Blk 0 •Cnt: 3 Blk 1 • Cnt: 3 Blk 2 • Cnt: 4 Blk 3 • Cnt: 0 Blk 4 • Cnt: 0 Blk 6 • Cnt: 4 Blk 7 • Cnt: 2 Blk 8 • Cnt: 2 Blk 9 • Cnt: 0 Blk 10 • Cnt: 0
  • 25. Vamos analisar a Shared Buffer?
  • 26. Como configurar as áreas de memória? • Shared Buffer • Page cache + clock sweep • Work_mem • Arquivos temporários • Planos de Execução
  • 27. E a minhas queries?
  • 28. Como Configurar o SO? • vm.overcommit_memory • vm.min_free_kbytes • vm.swappiness • echo -17 > /proc/12465/oom_adj Crédito: Brendan Gregg Ilya Kosmodemiansky
  • 29. Vamos dar uma olhada no SO? • Sar –B • Sar –W • iostat
  • 30. Conclusão • Tema complexo, sempre há muito a aprender e continuar estudando e testando é importante • Vital para o funcionamento correto do SGBD
  • 31. @rauldoliveira [email protected] Scripts utilizados disponíveis em: https://github.com/rauldoliveira/PGConf2019 Muito Obrigado!