innodbperformance optimization · settings for innodb • is adapting index helping you or hurting...

60
© 2017 Percona 1 Peter Zaitsev Innodb Performance Optimization Most important practices CEO Percona Technical Webinars December 20 th , 2017

Upload: others

Post on 12-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona1

PeterZaitsev

Innodb PerformanceOptimizationMostimportantpractices

CEOPerconaTechnicalWebinarsDecember20th,2017

Page 2: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona2

AboutthisPresentation

InnodbArchitectureandPerformanceOptimization

3hIn-depthtutorialdeliveredatPerconaLiveConferences

Thisisthemostimportanthighlights+somenewmaterial

Page 3: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona3

PerformanceOptimizations

WhataretheGoalsof“PerformanceOptimization”?

Page 4: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona4

GoalsofPerformanceOptimization

• PerformanceMakeQueriesRunFaster

• AndSaveCostsImproveEfficiency

• Run“Larger”applicationsonthesamesystem

AchieveScalability

Page 5: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona5

ThisPresentationFocus

GettingmostoftheSingleNode

NottouchingArchitectureOptimizations

Page 6: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona6

OptimizationAreas

Hardware/Infrastructure

OperatingSystems

MySQLVersion

MySQLSettings

Queries

Schema

Page 7: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona7

HardwareandInfrastructure

Page 8: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona8

Hardware/InfrastructureOptimizations

CPU

Memory

Storage

Network

Page 9: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona9

MostSuggestionsapplytoCloudandNon-CloudEnvironments

SpecificRecommendationsforAWSCloud

GeneralandAmazonCloud

Page 10: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona10

CPUforInnodb

FasterCPUsareBetter

MostlySingleThreadedhandlingofasingleQuery

Multi-CoreforHighlyConcurrentWorkload

MySQLnowscalesto64+Cores

Page 11: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona11

MySQL/Innodb MultiCoreScalabilityhttps://www.mysql.com/why-mysql/benchmarks/

Page 12: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona12

HowmuchConcurrencydoyouHave?StatusVariablethreads_running isagreatindicator

Page 13: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona13

OKbutwhataboutCPU?Numberof“runnable”processesinVMSTATgoodproxy

Page 14: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona14

CPUonAWS

•GeneralPurposeM5InstanceType

• FasterCPUbutnotasmuchmemoryC5InstanceType

•MoreMemorybutlessCPUR4InstanceType

• EvenMoreMemoryperCPUX1/X1eInstanceType

• BurstableCPUforlightworkloadsT2InstanceType

Page 15: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona15

Memory

Memoryismostlyusedforcaching

Trytofit“WorkingSet”inmemory

CachingImprovesReadsandWritesPerformance

Page 16: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona16

MemoryandStorageCapacityPlanning

• HitratioisuselessThinkaboutMisses(StorageIO)

• DifferentPerformanceProfileThinkaboutReadsandWritesseparately

• DonotpushmoreIOthandevicecanhandleThinkThroughput

• HowmanyIOquerycandoandstillbefast?ThinkLatency

Page 17: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona17

Writes

DelayingWritesCan’tgoonforever

BehindManyWritesthereis

aRead

Page 18: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona18

FlushingImpactsPerformanceFasterPerformanceatFirst,UntilFlushingneedstohappen

Page 19: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona19

Innodb ChangeBuffer– LongWarmup

Page 20: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona20

Storage

EvenFastestStorageisalotslowerthanMemory

StorageIOhastobedonein16Kpages(bydefault)

Memoryaccessescanread/writefewbytes

Page 21: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona21

TypeofStorage

UseSSD

WheneverDirectlyAttachedornot

LocalNVMeandIntelOptanearefastest

Page 22: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona22

Storage

IOlatencyiscritical

Whatisoptimalconcurrency(queuedepth)

ReadsvsWrites

WritesandFlushes

WriteCache,butDurableWriteCache

Page 23: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona23

ReadandWriteLatency

Page 24: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona24

UnderstandingIOConcurrency

Page 25: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona25

AWSStorageChociesEBSio1(Provisioned

IOPS)

• Upto500MB/secand32.000IOPSpervolume

• ScaleIOcapacityindependentlyfromthesize

• Expensive

EBSgp2

• Burstableforsmallvolumes(lessthen1TB)

• Performancescaleswithsize– 3IOPSperGB

LocalNVMe(i3instancetype)

• NonRedundant• PerformanceandSpaceDependsonInstanceSize

• Upto3.3MIOPSand16GB/sec

Page 26: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona26

PXCBestPracticesonAWSExtensiveBenchmarksdonehttp://bit.ly/2zeRpSZ

Page 27: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona27

Network

“FrontEnd”Network

•TotheMySQLClient(Application)

“BackEnd”

•ForNetworkAttachedStorage

Page 28: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona28

NetworkPerformance

• TheMostCriticalLatency• CanbebottleneckforLargeDataTransferBandwith

• NetworkperformanceisnotconstantVariance

Page 29: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona29

NetworkinAWS

SingleAvailabilityZone(AZ)

• LowestLatency(Fastest)

SingleRegion,DifferentAZ

• MediumLatency

MultipleRegions

• HighestLatency(Slowest)

Page 30: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona30

HardwareRelatedInnodb Settings• Innodb_buffer_pool_size

• HowmuchmemorytoallocateforCaching• Innodb_buffer_pool_instances

• Increaseupto16ifyouhavelargenumberofCPUcores• Innodb_flush_method=O_DIRECT

• BypassOScache.GoodchoiceformostIOsubsystems• Innodb_flush_log_at_trx_commit

• 1– durable.0– notdurable.2– inbetween• sync_binlog

• 1– binlog durabilitybuthighperformancecost• innodb_io_capacity

• TellInnodb howmuchIOstoragesystemcanhandle

Page 31: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona31

OperatingSystem

Page 32: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona32

Linux

ModernVersion

CloudOptimizedifRunningintheCloud

RHELcompatibleandDebian/Ubuntuaremostcommon

Page 33: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona33

OperatingSystemSettings• NumberofOpenFilesforMySQLProcess

• Ifusinglargenumberofconnectionsorlargenumberoftables• Filesystem

• XFSorEXT4• Mount–onoatime

• DiskScheduler• DeadlineorNoop• cat/sys/block/sda/queue/scheduler• NVMe StorageDoesnothaveScheduler

Page 34: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona34

OperatingSystemSettings• NUMA

• OnlyonNUMA(Multi-SocketHardware)• MySQL5.7Optioninnodb_numa_interleave=1• PerconaServer5.5+numa_interleave=1

• CPUGovernor• SavingPowercancostyouperformance• cat/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor• cpufreq-set-r-gperformance

Page 35: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona35

Swapping• ShouldyouEnableSwap?

• WouldyoupreferMySQLtobekilled(crash)duetolackofMemory?• WouldyoupreferMySQLtoslowdownwithlackofMemory?• WouldyouwantunusedstufftobeswappedoutfromMemory?

• Ifusingswap• Setvm.swappiness=1• echo'vm.swappiness =1'>>/etc/sysctl.conf

Page 36: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona36

SwaponSSDisbadbutnotthatBadhttp://bit.ly/2BJBTAJ

Page 37: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona37

MySQLVersions

Page 38: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona38

MySQLVersionBestPractices

UseModernVersion(MySQL5.7)

ConsiderPerconaServer

Page 39: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona39

BewareSingleThreadPerformanceRegressionshttp://bit.ly/2oMvu2a

Page 40: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona40

MySQLConfiguration

Page 41: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona41

SettingstoThinkAbout• HowManyConnectionsdoyouneed?

• max_connections=N• HowManyTablesdoyouhave?

• table_open_cache=X• table_definition_cache=Y

• WhatCharacterSetdoyouuse?• character-set-server=utf8• collation-server=utf8_general_ci

• HowLongtoKeepBinaryLog• log_bin• expire_log_days=N

Page 42: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona42

ConnectionandTableStatus

Page 43: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona43

SettingsforInnodb• IsAdaptingIndexHelpingyouorHurtingyou?

• innodb_adaptive_hash_index=1/0• innodb_adaptive_hash_index_parts=N

• HowmuchspacetoallowforChangeBuffer• innodb_change_buffer_max_size=5

• HowmuchofBufferPooltoReload?• innodb_buffer_pool_dump_pct=80

• DoubleWriteCanbedisabledonZFS• innodb_doublewrite

• DisableInnodb FlushNeighborsifrunningonSSD• Innodb_flush_neighbors=0

Page 44: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona44

ChangeBufferandAdaptiveHashIndex

Page 45: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona45

SettingsforInnodb• HowMuchIOtoGiveInnodb

• Innodb_io_capacity• Innodb_io_capacity_max

• Howquicklytogiveupwaitingforlockandreturnerror?• innodb_lock_wait_timeout

• LogBufferForcachingWrites• innodb_log_buffer_size=32M

• TradeoffofWritePerformanceandRecoverTime• Innodb_log_file_size=1G

• ProtectionfromPurgeLag• innodb_max_purge_lag=10000000• innodb_max_purge_lag_delay=10000

Page 46: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona46

LogfileandLogBuffer

Page 47: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona47

SettingsforInnodb• Innodb BufferPoolScanResistance

• innodb_old_blocks_pct=70• Innodb_old_blocks_time=5000

• HowmanyfilesInnodb cankeepopen• innodb_open_files=N

• SmallerPagesizesbetterforsomeworkloads• innodb_page_size=4096

• Onlocktimeoutrollbacktransactionorstatement?• innodb_rollback_on_timeout

• SpeedupInnodb IndexBuildsifyouhavememory• innodb_sort_buffer_size

Page 48: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona48

SettingsforInnodb• LongerSpinscanreduceContextSwitching

• innodb_spin_wait_delay• HowInnodb IndexStatisticsworks

• innodb_stats_persistent• innodb_stats_persistent_sample_pages• innodb_stats_transient_sample_pages

• ExcessiveContentionProtection• innodb_thread_concurrency• OruseThreadPool

• Innodb RandomReadAheadcanbehelpful• innodb_random_read_ahead

• Innodb IOConfiguration• Ensureinnodb_use_native_aio ison• innodb_read_io_threads• innodb_write_io_threads

Page 49: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona49

IsRead-AheadHelpingorHurting

Page 50: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona50

QueriesandSchema

Page 51: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona51

DataisClusteredbyPrimaryKey

UsePrimaryKeys

UseShortPrimaryKeys

UseSequentialPrimaryKeys(ieauto_increment)

PrimaryKeyLookupsarefaster(especiallyranges)

Page 52: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona52

SecondaryKeysRefertorowbyPK

SecondaryKeyLookupsareslower

Longprimarykeys=bloatedsecondarykeys

Primarykeyessentiallyappendedtoprimarykeys

KEY(A)meanKEY(A,ID)forQueries

Page 53: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona53

MultiVersionConcurrencyControl(MVCC)Readersdonotblockwriters

Writersdonotblockreaders

Readersread“stale”data

LockingReadsareavailablewhencurrentstateisneeded

OldversionsofrowsarekeptinseparateUndoSpace

Oldindexentriesarekeptintheindexes

PurgeThreadsareconstantlycleaningoldgarbage

Page 54: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona54

OptimizingforMVCC

AvoidLongrunningReadTransactionsconcurrentwithHeavyWrites

AvoidTransactionswhichmodifylargeamountofrows

AvoidveryHotRowsastheycangeneratelongUndoChains

Page 55: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona55

Repeatable-ReadvsRead-Committed

REPEATABLE-READ

• DefaultIsolationMode• Viewthedataatthepointoffirstselectintransaction

• CanadditionallydelayPurgeProcess

READ-COMMITTED

• Viewdataatthepointofstartofthestatement

• Canhelptoreduceunpurgedbloat

• Canincrease“transactionallocationoverhead”athighconcurrency

Page 56: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona56

UnderstandingTopQueries

Page 57: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona57

Understandingwhatmakesthemslow

Page 58: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona58

WherealltheGraphsComeFrom?

PerconaMonitoringandManagement(PMM)

http://bit.ly/GetPMM

http://pmmdemo.percona.com

Page 59: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

©2017Percona59

SAVE THE DATE!

CALL FOR PAPERS IS NOW OPEN!www.perconalive.com

April 23-25, 2018Santa Clara Convention Center

Page 60: InnodbPerformance Optimization · Settings for Innodb • Is Adapting Index Helping you or Hurting you ? • innodb_adaptive_hash_index=1/0 • innodb_adaptive_hash_index_parts=N

DATABASE PERFORMANCEMATTERS

DatabasePerformanceMattersDatabasePerformanceMattersDatabasePerformanceMattersDatabasePerformanceMattersDatabasePerformanceMatters