Desempenho e escalabilidade de
Banco de Dados em ambiente x86
Bruno Domingues
Principal Architect
bruno.domingues@intel.com
Básico: Configuração de BIOS
• Sempre verifique as
configurações apropriadas
de BIOS para:
• Procure por:
– Funcionalidade...
Configuração e Desempenho do Servidor
1. CPU2. Memória
3. I/O e Disco
Lei de Moore
Lei de Moore:
Inovação em Tecnologia permite
dobrar o número de transistores no
microchip a cada dois anos
“A...
Porque o processo importa, uma perspectiva
histórica
em 2004 ………….
Hyper-Threading
Time(proc.cycles)
sem SMT SMT
Note: Cada
Caixa representa
uma unidade de
execução do
processador
• Múltipl...
SMT em Mapeamentos de CPU no Linux
Topologia do processador
• Em /proc/cpuinfo
• Você poderá ver 16 CPUs: 0-15
• Processor...
Comparativo de Desempenho do SMT
1 2 4 8 12 16 20 24 28 32 36 40 44 48
OracleTransactions
Threads
Typical Oracle OLTP Perf...
Escalando Frequência com CPUSPEED
[root@london1 ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : ...
Prioridades de scheduling
Exemplo de carga com Oracle
Top 5 Timed Events Avg %Total
~~~~~~~~~~~~~~~~~~ wait Call
Event Waits Time (s) (ms) Time Wait...
Memória e o Oracle
Connected to:
Oracle Database 10g Express Edition Release
SQL> show sga;
Total System Global Area 80530...
Memória Física e Virtual
• Cada processo vê a memoria virtual continua
• MMU (Memory Management Unit) na CPU traduz o virt...
48-bit de Endereçamento Virtual
• Cada entrada de endereço são de 8 bytes (64 bits)
• 48 bits = PML4 + PDP + PDE + PTE + p...
Huge Pages
• Huge Pages altera o endereçamento de offset (normalmente 2 para o 21° em
x86_64 = 2MB)
• Parametro do kernel ...
Memória Física: Arquitetura
QuickPath Interconnect
Non-Uniform Memory Access (NUMA)
Nehalem
EP
Nehalem
EP
Tylersburg
EP
• Arquitetura FSB
- Toda a mem...
NUMA e Oracle
Subject: Oracle NUMA usage recommendation
Doc ID: 759565.1 Type: ALERT Modified Date : 19-JUN-2009 Status: P...
NUMA Desabilitada
[oracle@london1 ~]$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch
0x...
Ou use Huge Pages
NUMA Habilitada
[oracle@london1 ~]$ ipcs -m
------ Shared Memory Segments ---
key shmid owner perms byte...
Monitoramento e Estatísticas NUMA
/sys/devices/system/node
[root@london1 node0]$ more meminfo
Node 0 MemTotal: 9276828 kB
...
Considerações sobre banda de memória
• Maximum B/W:
– DDR3 1333 across 3 channels
– Up to 1 DPC (6 DIMMs total)
– Max capa...
Exemplo 1 de DMIDECODE
#dmidecode
Motherboard
Handle 0x0003, DMI type 2, 16 bytes
Base Board Information
Manufacturer: Int...
Exemplo 2 de DMIDECODE
#dmidecode
Motherboard
Handle 0x0002, DMI type 2, 15 bytes.
Base Board Information
Manufacturer: Su...
Disco e I/O
1 2 4 8 12 16 20 24
OracleTransactions
Threads
Oracle OLTP
I/O Impact on Performance
Subsistema de armazenamen...
Dependência de OLTP Redo I/O
Event Waits Time(s) Avg wait (ms) % DB time Wait Class
log file sync 894,491 5,490 6 61.33 Co...
Dependência de OLTP Redo CPU
Event Waits Time(s) Avg wait (ms) % DB time Wait Class
log file sync 1,795,089 5,909 3 50.38 ...
Desempenho de Disco rígido e CPU
175x CPU vs. 1.3x ganhos com discos rígidos
NormalizedPerformance
Desempenho de CPU norma...
Comparativo de Disco Rigido e SSD
1 rack de 120 HDDs
36,000 IOPS
12 GB/sec com banda sustentável
1452 Watts
8.8 TB
1 rack ...
SAN vs. SSD para desempenho de OLTP
8 discos SSD
15 discos SAN
Desempenho Virtual vs. Nativo
Native Performance Drives Virtualized Performance
Desempenho do virtualizado é proporcional ...
Obrigado!
Próximos SlideShares
Carregando em…5
×

Desempenho e Escalabilidade de Banco de Dados em ambiente x86

1.503 visualizações

Publicada em

CMG Brasil 2013

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.503
No SlideShare
0
A partir de incorporações
0
Número de incorporações
972
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Desempenho e Escalabilidade de Banco de Dados em ambiente x86

  1. 1. Desempenho e escalabilidade de Banco de Dados em ambiente x86 Bruno Domingues Principal Architect bruno.domingues@intel.com
  2. 2. Básico: Configuração de BIOS • Sempre verifique as configurações apropriadas de BIOS para: • Procure por: – Funcionalidades de CPU – Memória – Gerenciamento de Energia • Exemplo: – Configurações padrão não são ótimas para os principais SGDBs do mercado • Se não está seguro quanto a melhor configuração, teste!
  3. 3. Configuração e Desempenho do Servidor 1. CPU2. Memória 3. I/O e Disco
  4. 4. Lei de Moore Lei de Moore: Inovação em Tecnologia permite dobrar o número de transistores no microchip a cada dois anos “A adoção da liga high-k marca a maior transformação na tecnologia do transistor desde o final da década de 60” – Gordon Moore Capacidades do silicio: • Mais transistores para novas funções de capacidades • Maior desempenho • Menor consumo de potência (chaveamento e fuga) • Menor footprint
  5. 5. Porque o processo importa, uma perspectiva histórica em 2004 ………….
  6. 6. Hyper-Threading Time(proc.cycles) sem SMT SMT Note: Cada Caixa representa uma unidade de execução do processador • Múltiplos núcleos - Núcleos completamente duplicados - Aparecem como dois (ou mais) processadores físicos para o sistema operacional - Executa threads independentes com seus próprios recursos computacionais - Prove um meio de aumentar o desempenho e minimiza o consumo de potência e dissipação térmica • SMT Multithread simultânea - Executa duas threads ao mesmo tempo por núcleo • Tira vantagem da máquina de execução de 4 vias - Mantêm o processador alimentado com múltiplas threads - Oculta latências de uma única thread • Funcionalidade que provê excelente eficiência de potência - Ocupa uma pequena área do processador - Pode prover ganho significativo de desempenho *dependendo da aplicação*
  7. 7. SMT em Mapeamentos de CPU no Linux Topologia do processador • Em /proc/cpuinfo • Você poderá ver 16 CPUs: 0-15 • Processor Topology Tool identifica qual thread está em qual CPU do Linux (e muito mais) Socket 0 OScpu# | 0 8 | 1 9| 2 10| 3 11| Core |c0_t0 c0_t1|c1_t0 c1_t1|c2_t0 c2_t1|c3_t0 c3_t1| Socket 1 OScpu# | 4 12| 5 13| 6 14| 7 15| Core |c0_t0 c0_t1|c1_t0 c1_t1|c2_t0 c2_t1|c3_t0 c3_t1| Ex. Socket 0, Core 0, Thread 1 é Linux CPU 8
  8. 8. Comparativo de Desempenho do SMT 1 2 4 8 12 16 20 24 28 32 36 40 44 48 OracleTransactions Threads Typical Oracle OLTP Performance Profile Arquitetura Nehalem com o SMT habilitado Arquitetura Nehalem com o SMT desabilitado Geração anterior como baseline
  9. 9. Escalando Frequência com CPUSPEED [root@london1 ~]# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU X5570 @ 2.93GHz stepping : 5 cpu MHz : 2933.570 cache size : 8192 KB … [root@london1 ~]# service cpuspeed stop Disabling ondemand cpu frequency scaling:[ OK ] [root@london1 ~]# cat /proc/cpuinfo | grep -i MHz cpu MHz : 2927.000 cpu MHz : 2927.000 [root@london1 ~]# service cpuspeed start Enabling ondemand cpu frequency scaling:[ OK ] [root@london1 ~]# cat /proc/cpuinfo | grep -i MHz cpu MHz : 1596.000 cpu MHz : 1596.000 [root@london1 ~]# cat /proc/cpuinfo | grep -i MHz cpu MHz : 1596.000 cpu MHz : 2927.000 Frequências independentes em resposta a demanda Valores dinâmicos em /proc/cpuinfo
  10. 10. Prioridades de scheduling
  11. 11. Exemplo de carga com Oracle Top 5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time Wait Class ------------------------------ ------------ ----------- ------ ------ ---------- latch: cache buffers chains 114,324 218,927 2154 72.1 Concurrenc CPU time 25,442 9.1 latch free 1,998 1,342 577 0.2 Other ------------------------------------------------------------- SQL> select * from (select name, addr, spin_gets, gets, misses, sleeps from v$latch_Children where name = 'cache buffers chains' order by gets desc) where rownum < 5; NAME ---------------------------------------------------------------- ADDR SPIN_GETS GETS MISSES SLEEPS ---------------- ---------- ---------- ---------- ---------- cache buffers chains 00000003E1A0A3F8 838682200 1136069722 839855996 4227 cache buffers chains 00000003E164AA10 0 29037 0 0 cache buffers chains 00000003E1A43220 0 14800 0 0 CPU do SO está em 100% porém no Oracle apresenta apenas 9%
  12. 12. Memória e o Oracle Connected to: Oracle Database 10g Express Edition Release SQL> show sga; Total System Global Area 805306368 bytes Fixed Size 1289996 bytes Variable Size 197132532 bytes Database Buffers 603979776 bytes Redo Buffers 2904064 bytes SQL>
  13. 13. Memória Física e Virtual • Cada processo vê a memoria virtual continua • MMU (Memory Management Unit) na CPU traduz o virtual para a memória física • A TLB (Translation Lookaside Buffer) armazena as traduções mais recentes [root@london1 ~]# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU X5570 @ 2.93GHz … address sizes : 40 bits physical, 48 bits virtual • 40/44 bit fisico 1TB/16TB de memória • MAXPHYADDR para x86-64 é de 52 bits = 4 Petabytes
  14. 14. 48-bit de Endereçamento Virtual • Cada entrada de endereço são de 8 bytes (64 bits) • 48 bits = PML4 + PDP + PDE + PTE + page offset • Atualmente reservados os 16 bits mais altos de endereçamento • bits 48 ao 63 são atualmente o mesmo que o bit 47 • Tamanho de página definido pelo offset • Ex. no Linux #define PAGE_SHIFT 12 • 2 para a potência de 12 = 4KB Page • Ex. endereço linear em x86_64 bit 47 bit 0 47 39 38 30 29 12 20 12 11 0 PML4 Directory Ptr Directory Table Offset • Cada processo necessita 8 bytes por página de 4KB • Até 256TB de espaço de endereço linear
  15. 15. Huge Pages • Huge Pages altera o endereçamento de offset (normalmente 2 para o 21° em x86_64 = 2MB) • Parametro do kernel vm.nr hugepages 47 39 38 30 29 21 20 0 PML4 Directory Ptr Directory Offset ... HugePages Total: 0 HugePages_Free: 0 Hugepagesize: 2048kB HugePages_Total: 7500 HugePages_Free: 299 HugePages_Rsvd: 0 Hugepagesize: 2048 kB
  16. 16. Memória Física: Arquitetura
  17. 17. QuickPath Interconnect Non-Uniform Memory Access (NUMA) Nehalem EP Nehalem EP Tylersburg EP • Arquitetura FSB - Toda a memória em um local • Iniciando com o Nehalem (x86) - Memória localizada em multiplos locais • Latência para memória depende do local • Memória Local - Maior banda - Menor Latência • Memória Remota - Maior Latência Verifique se o software é otimizado para NUMA
  18. 18. NUMA e Oracle Subject: Oracle NUMA usage recommendation Doc ID: 759565.1 Type: ALERT Modified Date : 19-JUN-2009 Status: PUBLISHED Disabling or enabling NUMA can change application performance. It is strongly recommended to evaluate the performance after disabling or before enabling NUMA in a test environment. Operating system and/or hardware configuration may need to be tuned or reconfigured when disabling Oracle NUMA support. Consult your hardware vendor for more information or recommendation select a .ksppinm "Parameter", b.ksppstvl "Session Value", c.ksppstvl "Instance Value" from x$ksppi a, x$ksppcv b, x$ksppsv c where a.indx = b.indx AND a.indx = c.indx AND ksppinm like '%NUMA%'; … _enable_NUMA_support TRUE In Alert.log NUMA system found and support enabled (4 domains - 16,16,16,16)
  19. 19. NUMA Desabilitada [oracle@london1 ~]$ ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch 0x6422c258 32768 oracle 660 4096 0 0x10455eac 98305 oracle 600 15034482688 31 Processor Processor Alocação de 64 bytes round-robin NUMA é habilitado por padrão se estiver habilitado na BIOS Porém pode ser desligado no kernel pela seguinte opção: kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00 numa=off dmesg | grep -i numa Command line: ro root=/dev/VolGroup00/LogVol00 numa=off NUMA turned off NUMA OFF : Apenas um nó de memória configurado [root@nehalem1 ~]# numactl --hardware available: 1 nodes (0-0) node 0 size: 18149 MB node 0 free: 2685 MB node distances: node 0 0: 10 Linux enxerga memória como nó 0 apenas PORÉM intercalado pelo Sistema com alocações de 64 bytes Memória eventualmente alocada por padrão.
  20. 20. Ou use Huge Pages NUMA Habilitada [oracle@london1 ~]$ ipcs -m ------ Shared Memory Segments --- key shmid owner perms bytes 0xa3c20e68 32768 oracle 660 4096 0 0x00000000 884737 oracle 660 1140850688 28 0x00000000 917506 oracle 660 5905580032 28 0x00000000 950275 oracle 660 5905580032 28 0xfb0938e4 983044 oracle 660 2097152 28 When NUMA is enabled [oracle@london1 ~]$ dmesg | grep -i numa NUMA: Using 31 for the hash shift NUMA ON: dois nós de memória configurados [oracle@nehalem1 ~]$ numactl --hardware available: 2 nodes (0-1) node 0 size: 9059 MB node 0 free: 778 MB node 1 size: 9090 MB node 1 free: 1306 MB node distances: node 0 1 0: 10 21 1: 21 10 Processor Processor Linux enxerga como nó 0 e nó 1 Distâncias transmitem latência Linux e o SGDB devem gerenciar a memória Processor Processor Alocações de 2MB
  21. 21. Monitoramento e Estatísticas NUMA /sys/devices/system/node [root@london1 node0]$ more meminfo Node 0 MemTotal: 9276828 kB Node 0 MemFree: 1465256 kB Node 0 MemUsed: 7811572 kB Node 0 Active: 211400 kB Node 0 Inactive: 77752 kB Node 0 HighTotal: 0 kB Node 0 HighFree: 0 kB Node 0 LowTotal: 9276828 kB Node 0 LowFree: 1465256 kB Node 0 Dirty: 28 kB Node 0 Writeback: 0 kB Node 0 FilePages: 170280 kB Node 0 Mapped: 38620 kB Node 0 AnonPages: 199608 kB Node 0 PageTables: 13304 kB Node 0 NFS_Unstable: 0 kB Node 0 Bounce: 0 kB Node 0 Slab: 15732 kB Node 0 HugePages_Total: 3588 Node 0 HugePages_Free: 847 [oracle@london1 ~]$ numastat node0 node1 numa_hit 394822 873142 numa_miss 0 0 numa_foreign 0 0 interleave_hit 11826 11605 local_node 386530 854775 other_node 8292 18367 [root@london1 ~]# numactl --show policy: default preferred node: current physcpubind: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cpubind: 0 1 nodebind: 0 1 membind: 0 1
  22. 22. Considerações sobre banda de memória • Maximum B/W: – DDR3 1333 across 3 channels – Up to 1 DPC (6 DIMMs total) – Max capacity: 48 GB • General purpose: – DDR3 1066 across 3 channels – Up to 2 DPC (12 DIMMs total) – Max capacity: 96GB • Maximum capacity: – DDR3 800 across 3 channels – Up to 3 DPC (18 DIMMs total) – Max capacity: 144GB (DPC – Dimms por canal) CPU CPU CPU CPU CPU CPU 10.6 GB/s 10.6 10.6 8.5 GB/s 8.5 8.5 6.4 GB/s 6.4 6.4 Capacidade de Banda por processador 25.5GB/s 96GB 19.2GB/s 144GB 32GB/s 48GB 6102 9776 27208 33203 36588 HTN 3.16/ BF1333/ 667 MHz mem HTN 3.00/ SB1600/ 800 MHz mem NHM 2.93/ 800 MHz mem/3 DPC NHM 2.93/ 1066 MHz mem/2 DPC NHM 2.93/ 1333 MHz mem/1 DPC Maior é melhor Banda de streaming – Mbytes/Sec +274% Capacidade e Banda na plataforma Memória 1333 MHz Memória 1066 MHz Memória 800 MHz Source: Intel internal measurement – March 2009
  23. 23. Exemplo 1 de DMIDECODE #dmidecode Motherboard Handle 0x0003, DMI type 2, 16 bytes Base Board Information Manufacturer: Intel Product Name: S5000PAL0 Processor Processor Information Version: Intel(R) Xeon(R) CPU X5355 Memory Handle 0x0034, DMI type 17, 27 bytes Memory Device Data Width: 64 bits Size: 2048 MB Form Factor: DIMM Set: 1 Locator: ONBOARD DIMM_A1 Bank Locator: Not Specified Type: DDR2 Type Detail: Synchronous Speed: 667 MHz (1.5 ns) • O que isso nos diz: Motherboard 4 canais de memória (S5000PAL0) 8 Slots (A1/A2/B1/B2/D1/D2) canais CPU Intel Clovertown CPUs 1333Mhz (Dual independente FSB) Bandwidth 10666 MB/s por FSB 21 GB/s Máxima banda do FSB Memória Memória DDR2 667 = PC2-5300 4 canais de memória a 5.3GB/s cada Banda de memória a 21 GB/s de todos os 4 canais 16GB memória total
  24. 24. Exemplo 2 de DMIDECODE #dmidecode Motherboard Handle 0x0002, DMI type 2, 15 bytes. Base Board Information Manufacturer: Supermicro Product Name: X8DTN Processor Processor Information Version: Intel(R) Xeon(R) CPU X5570 Memory Array Handle: 0x0029 Data Width: 64 bits Size: 1024 MB Form Factor: DIMM Set: 1 Locator: A1_DIMM0 Bank Locator: A1_Node0_Channel0_Dimm0 Type: <OUT OF SPEC> Type Detail: Synchronous Speed: 800 MHz (1.2 ns) • O que isso nos diz: Motherboard 6 canais de memória (X8DTN), 18 slots Node0/Node1,Channel0/1/2, DIMM0/1/2 CPU Intel Nehalem CPUs 3.2GHz QPI (Quickpath Interconnect) Banda de 25.6 GB/s socket to socket Até 32GB/s de banda de memória por CPU Memória Memória DDR3 800 = PC4-6400 6 canais de memória a 6.4GB/s cada Banda de memória a 38.4GB/s de todos os 6 canais 19.2GB/s por processador 18GB memória total
  25. 25. Disco e I/O 1 2 4 8 12 16 20 24 OracleTransactions Threads Oracle OLTP I/O Impact on Performance Subsistema de armazenamento “A” Subsistema de armazenamento “B” • Servidores idênticos com CPU e memória • SO e SGDB idênticos • Aplicações idênticas e cargas • Diferentes sistemas de armazenamento Amdahl’s Rule of Thumb 1 byte of memory and 1 byte per second of I/O are required for each instruction per second supported by a computer
  26. 26. Dependência de OLTP Redo I/O Event Waits Time(s) Avg wait (ms) % DB time Wait Class log file sync 894,491 5,490 6 61.33 Commit DB CPU 2,116 23.64 db file sequential read 82,013 728 9 8.14 User I/O enq: TX - row lock contention 17,977 116 6 1.29 Application latch: In memory undo latch 44,552 79 2 0.88 Concurrency Per Second Transactions: 4,023.7 Subject: WAITEVENT: "log file sync" Reference Note Doc ID: 34592.1 Type: REFERENCE Modified Date : 14-JUL-2009 Status: PUBLISHED Tune LGWR to get good throughput to disk . eg: Do not put redo logs on RAID 5
  27. 27. Dependência de OLTP Redo CPU Event Waits Time(s) Avg wait (ms) % DB time Wait Class log file sync 1,795,089 5,909 3 50.38 Commit DB CPU 2,789 23.78 db file sequential read 162,468 2,703 17 23.05 User I/O enq: TX - row lock contention 23,311 205 9 1.74 Application log file switch completion 1,429 52 37 0.44 Configuration Per Second Transactions: 8,264.3 • Subsistemas de discos idênticos • Memórias identicas • OS e SGDB identicos • Upgrade CPU (LGWR também precisa de CPU) Atualização de memória de uma geração para outra pode trazer até 2x mais desempenho para o redo
  28. 28. Desempenho de Disco rígido e CPU 175x CPU vs. 1.3x ganhos com discos rígidos NormalizedPerformance Desempenho de CPU normalizado pelo tempo médio de acesso para leituras de 20k 200 180 160 140 120 100 80 0 Jan '96 Jan '97 Jan '98 Jan '99 Jan '00 Jan '01 Jan '02 Jan '03 Jan '04 Jan '05 Jan '06 Jan '08 Source: Intel measurementsDate Desempenho aferido de ganho de CPU= 175x Desempenho aferido do disco rigido = 1.3X desde 1996 60 40 20 Jan '07 Jan '09 Potencial do SSD Multicore CPU CPU disco
  29. 29. Comparativo de Disco Rigido e SSD 1 rack de 120 HDDs 36,000 IOPS 12 GB/sec com banda sustentável 1452 Watts 8.8 TB 1 rack de 120 SSDs 4,200,000 IOPS 36 GB/sec com banda sustentável 288 Watts 3.8 TB Por HDD: – R/W 150 MB/sec – 320 IOPS (Read) – 120 IOPS (Write) – 12.1 W (active) Por SSD: – Read 250 MB/sec – Write 170 MB/sec – 35,000 IOPS (Read) – 4000 IOPS (Write) – 2.4 W (active)
  30. 30. SAN vs. SSD para desempenho de OLTP 8 discos SSD 15 discos SAN
  31. 31. Desempenho Virtual vs. Nativo Native Performance Drives Virtualized Performance Desempenho do virtualizado é proporcional ao desempenho nativo Nativo Desempenho nativo leva a desempenho do virtualizado Virtual Overhead Nativo Virtual Overhead Overhead da virtualização Overhead aprox. 16%
  32. 32. Obrigado!

×