32
Desempenho e escalabilidade de Banco de Dados em ambiente x86 Bruno Domingues Principal Architect [email protected]

Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Embed Size (px)

DESCRIPTION

CMG Brasil 2013

Citation preview

Page 1: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Desempenho e escalabilidade de

Banco de Dados em ambiente x86

Bruno DominguesPrincipal Architect

[email protected]

Page 2: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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!

Page 3: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Configuração e Desempenho do Servidor

1. CPU2. Memória

3. I/O e Disco

Page 4: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 5: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Porque o processo importa, uma perspectiva

histórica

em 2004 ………….

Page 6: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Hyper-Threading

Tim

e (

pro

c. cycle

s)

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*

Page 7: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 8: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Comparativo de Desempenho do SMT

1 2 4 8 12 16 20 24 28 32 36 40 44 48

Ora

cle

Tra

nsacti

on

s

Threads

Typical Oracle OLTP Performance ProfileArquitetura Nehalem com o SMT

habilitado

Arquitetura Nehalem com o SMT

desabilitado

Geração anterior como baseline

Page 9: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 10: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Prioridades de scheduling

Page 11: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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%

Page 12: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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>

Page 13: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 14: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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_64bit 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

Page 15: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 16: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Memória Física: Arquitetura

Page 17: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

QuickPath Interconnect

Non-Uniform Memory Access (NUMA)

NehalemEP

NehalemEP

TylersburgEP

• 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

Page 18: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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_supportTRUEIn Alert.logNUMA system found and support enabled (4 domains - 16,16,16,16)

Page 19: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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.

Page 20: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 21: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 22: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 23: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 24: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 25: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Disco e I/O

1 2 4 8 12 16 20 24

Ora

cle

Tra

nsa

ctio

ns

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 Thumb1 byte of memory and 1 byte per second of I/O are required for each instruction per second supported by

a computer

Page 26: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 27: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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

Page 28: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Desempenho de Disco rígido e CPU175x CPU vs. 1.3x ganhos com discos rígidos

No

rmali

zed

Perf

orm

an

ce

Desempenho de CPU normalizado pelo tempo

médio de acesso para leituras de 20k

200

180

160

140

120

100

80

0Jan '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

Page 29: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Comparativo de Disco Rigido e SSD

1 rack de 120 HDDs36,000 IOPS

12 GB/sec com banda sustentável

1452 Watts

8.8 TB

1 rack de 120 SSDs4,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)

Page 30: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

SAN vs. SSD para desempenho de OLTP

8 discos SSD

15 discos SAN

Page 31: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

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 NativoVirtual

OverheadOverhead da

virtualização

Overhead aprox. 16%

Page 32: Desempenho e Escalabilidade de Banco de Dados em ambiente x86

Obrigado!