SlideShare uma empresa Scribd logo
1 de 31
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
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
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
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

PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
PostgreSQL Extensions: A deeper look
PostgreSQL Extensions:  A deeper lookPostgreSQL Extensions:  A deeper look
PostgreSQL Extensions: A deeper lookJignesh Shah
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
 
Deploying PostgreSQL on Kubernetes
Deploying PostgreSQL on KubernetesDeploying PostgreSQL on Kubernetes
Deploying PostgreSQL on KubernetesJimmy Angelakos
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL AdministrationEDB
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at NetflixBrendan Gregg
 
Postgres Vision 2018: WAL: Everything You Want to Know
Postgres Vision 2018: WAL: Everything You Want to KnowPostgres Vision 2018: WAL: Everything You Want to Know
Postgres Vision 2018: WAL: Everything You Want to KnowEDB
 
Redo log improvements MYSQL 8.0
Redo log improvements MYSQL 8.0Redo log improvements MYSQL 8.0
Redo log improvements MYSQL 8.0Mydbops
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLCommand Prompt., Inc
 
PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PGConf APAC
 
Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10Euler Taveira
 
Chasing the optimizer
Chasing the optimizerChasing the optimizer
Chasing the optimizerMauro Pagano
 
High Performance, High Reliability Data Loading on ClickHouse
High Performance, High Reliability Data Loading on ClickHouseHigh Performance, High Reliability Data Loading on ClickHouse
High Performance, High Reliability Data Loading on ClickHouseAltinity Ltd
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseNikolay Samokhvalov
 
PostgreSQL HA
PostgreSQL   HAPostgreSQL   HA
PostgreSQL HAharoonm
 
PostgreSQL High_Performance_Cheatsheet
PostgreSQL High_Performance_CheatsheetPostgreSQL High_Performance_Cheatsheet
PostgreSQL High_Performance_CheatsheetLucian Oprea
 
Security Best Practices for your Postgres Deployment
Security Best Practices for your Postgres DeploymentSecurity Best Practices for your Postgres Deployment
Security Best Practices for your Postgres DeploymentPGConf APAC
 
Working with JSON Data in PostgreSQL vs. MongoDB
Working with JSON Data in PostgreSQL vs. MongoDBWorking with JSON Data in PostgreSQL vs. MongoDB
Working with JSON Data in PostgreSQL vs. MongoDBScaleGrid.io
 
Memory Management with Page Folios
Memory Management with Page FoliosMemory Management with Page Folios
Memory Management with Page FoliosAdrian Huang
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyAlexander Kukushkin
 

Mais procurados (20)

PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
PostgreSQL Extensions: A deeper look
PostgreSQL Extensions:  A deeper lookPostgreSQL Extensions:  A deeper look
PostgreSQL Extensions: A deeper look
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
 
Deploying PostgreSQL on Kubernetes
Deploying PostgreSQL on KubernetesDeploying PostgreSQL on Kubernetes
Deploying PostgreSQL on Kubernetes
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at Netflix
 
Postgres Vision 2018: WAL: Everything You Want to Know
Postgres Vision 2018: WAL: Everything You Want to KnowPostgres Vision 2018: WAL: Everything You Want to Know
Postgres Vision 2018: WAL: Everything You Want to Know
 
Redo log improvements MYSQL 8.0
Redo log improvements MYSQL 8.0Redo log improvements MYSQL 8.0
Redo log improvements MYSQL 8.0
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs
 
Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10
 
Chasing the optimizer
Chasing the optimizerChasing the optimizer
Chasing the optimizer
 
High Performance, High Reliability Data Loading on ClickHouse
High Performance, High Reliability Data Loading on ClickHouseHigh Performance, High Reliability Data Loading on ClickHouse
High Performance, High Reliability Data Loading on ClickHouse
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
 
PostgreSQL HA
PostgreSQL   HAPostgreSQL   HA
PostgreSQL HA
 
PostgreSQL High_Performance_Cheatsheet
PostgreSQL High_Performance_CheatsheetPostgreSQL High_Performance_Cheatsheet
PostgreSQL High_Performance_Cheatsheet
 
Security Best Practices for your Postgres Deployment
Security Best Practices for your Postgres DeploymentSecurity Best Practices for your Postgres Deployment
Security Best Practices for your Postgres Deployment
 
Working with JSON Data in PostgreSQL vs. MongoDB
Working with JSON Data in PostgreSQL vs. MongoDBWorking with JSON Data in PostgreSQL vs. MongoDB
Working with JSON Data in PostgreSQL vs. MongoDB
 
Memory Management with Page Folios
Memory Management with Page FoliosMemory Management with Page Folios
Memory Management with Page Folios
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easy
 

Semelhante a Arquitetura de Memória do PostgreSQL

Monitorando os Recursos e Processos do Servidor, através do Power BI
Monitorando os Recursos e Processos do Servidor, através do Power BIMonitorando os Recursos e Processos do Servidor, através do Power BI
Monitorando os Recursos e Processos do Servidor, através do Power BISulamita Dantas
 
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorDeploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorZabbix BR
 
24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies24HOP Session - Database Administration Strategies
24HOP Session - Database Administration StrategiesMurilo Miranda
 
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016] Apache Cassandra Estratégias de Modelagem de DadosEiti Kimura
 
Redis e Estratégias Cache Distribuído
Redis e Estratégias Cache DistribuídoRedis e Estratégias Cache Distribuído
Redis e Estratégias Cache DistribuídoCristiano Cunha
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
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
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Rodrigo Campos
 
Exadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das PartesExadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das PartesLuis Marques
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringFelipe Klerk Signorini
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupAndré Cruz
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesJoao Galdino Mello de Souza
 
Apostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgelApostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgelPablo Mariano
 
Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Otávio Santana
 
Otimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataRodrigo Almeida
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchLuiz Henrique Zambom Santana
 
Computação de Alto Desempenho com PS3
Computação de Alto Desempenho com PS3Computação de Alto Desempenho com PS3
Computação de Alto Desempenho com PS3Orlando Junior
 

Semelhante a Arquitetura de Memória do PostgreSQL (20)

Monitorando os Recursos e Processos do Servidor, através do Power BI
Monitorando os Recursos e Processos do Servidor, através do Power BIMonitorando os Recursos e Processos do Servidor, através do Power BI
Monitorando os Recursos e Processos do Servidor, através do Power BI
 
Deep dive de Amazon Redshift
Deep dive de Amazon RedshiftDeep dive de Amazon Redshift
Deep dive de Amazon Redshift
 
Otimizando a performance com in-memory no SQL 2016
Otimizando a performance com in-memory no SQL 2016Otimizando a performance com in-memory no SQL 2016
Otimizando a performance com in-memory no SQL 2016
 
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorDeploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
 
24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies
 
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
 
Performance em Java
Performance em JavaPerformance em Java
Performance em Java
 
Redis e Estratégias Cache Distribuído
Redis e Estratégias Cache DistribuídoRedis e Estratégias Cache Distribuído
Redis e Estratégias Cache Distribuído
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
 
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
 
Exadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das PartesExadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das Partes
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon Meetup
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno Domingues
 
Apostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgelApostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgel
 
Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]
 
Otimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para Exadata
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
 
Computação de Alto Desempenho com PS3
Computação de Alto Desempenho com PS3Computação de Alto Desempenho com PS3
Computação de Alto Desempenho com PS3
 

Mais de Raul Oliveira

Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLRaul Oliveira
 
O Guia de Sobrevivência do "DBA Moderno"
O Guia de Sobrevivência do "DBA Moderno"O Guia de Sobrevivência do "DBA Moderno"
O Guia de Sobrevivência do "DBA Moderno"Raul Oliveira
 
Analise de Performance Usando o SO
Analise de Performance Usando o SOAnalise de Performance Usando o SO
Analise de Performance Usando o SORaul Oliveira
 
Arquitetura SQL Server
Arquitetura SQL ServerArquitetura SQL Server
Arquitetura SQL ServerRaul Oliveira
 
Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018Raul Oliveira
 

Mais de Raul Oliveira (6)

Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
 
ILM com PostgreSQL
ILM com PostgreSQLILM com PostgreSQL
ILM com PostgreSQL
 
O Guia de Sobrevivência do "DBA Moderno"
O Guia de Sobrevivência do "DBA Moderno"O Guia de Sobrevivência do "DBA Moderno"
O Guia de Sobrevivência do "DBA Moderno"
 
Analise de Performance Usando o SO
Analise de Performance Usando o SOAnalise de Performance Usando o SO
Analise de Performance Usando o SO
 
Arquitetura SQL Server
Arquitetura SQL ServerArquitetura SQL Server
Arquitetura SQL Server
 
Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018
 

Arquitetura de Memória do PostgreSQL

  • 2. 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
  • 3.
  • 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
  • 16.
  • 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
  • 23.
  • 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 raul.oliveira@msn.com Scripts utilizados disponíveis em: https://github.com/rauldoliveira/PGConf2019 Muito Obrigado!