SlideShare a Scribd company logo
Tuning Linux for your
database
Colin Charles,Team MariaDB, MariaDB Corporation
colin@mariadb.com / byte@bytebot.net
http://bytebot.net/blog/ | @bytebot on Twitter
FLOSSUK 2016, London
16 March 2016
1
whoami
• Work on MariaDB at MariaDB Corporation
(SkySQL Ab)
• Merged with Monty Program Ab, makers of
MariaDB
• Formerly MySQL AB (exit: Sun Microsystems)
• Past lives include Fedora Project (FESCO),
OpenOffice.org
• MySQL Community Contributor of theYear Award
winner 2014
2
Agenda
• Hardware or cloud
• I/O
• Filesystems
• Memory
• CPU
• Network
• Resources
3
Operating System
• Focus of this talk & tools: Linux
• But distributions make a difference too
• like RHEL6 has tuned but Ubuntu doesn’t
• Distribution versions can make a difference
too
• RHEL5: ktune; RHEL6: tuned; RHEL7:
tuned throughput-performance
4
Servers
• When you buy servers... do you think in
terms of CPU, then memory, then I/O?
• Database servers clearly love I/O more than
memory more than CPU
• queries! scans of large tables? index scans
with random I/O? BI?
• Durability requires each transaction commit
to be flushed to disk - i.e. call fsync()
5
I/O
• What kind of storage do you use?
• SAS or SATA?
• Ethernet (NAS, DRBD)
• SSD
• Fusion IO (NVMFS)
6
Schedulers (I/O
Elevators)
• cfq: default, great for slower storage
(SATA)
• noop: low latency storage (SSD)
• deadline: multi-process apps
• Most database workloads benefit from the
deadline scheduler (goal is after all to
minimise seeks, prioritise process I/O)
7
Elevators continued
• Boot time: elevator=deadline
•echo “deadline” > /sys/class/
block/sdaN/queue/scheduler
• http://dimitrik.free.fr/blog/archives/2012/01/
mysql-performance-linux-io.html
• http://www.mysqlperformanceblog.com/
2009/01/30/linux-schedulers-in-tpcc-like-
benchmark/
8
Sample elevator results
9
1 thread
tps
1 thread
ioutil%
8 threads
tps
8 threads
ioutil%
deadline* 15000 <1% 19100 <1%
deadline 6850 32% 15250 45%
cfq 5880 45% 1240 94%
File systems
• Choices: ext4, XFS
• mount options:
• ext4: rw,
nosuid,
noatime,
data=ordered,
nobarrier
• xfs: nobarrier
• Turn off I/O barriers
• http://lwn.net/Articles/
283161/
• Separate files (data/logs/
undo/etc.) or not?
• Don’t forget flash backed
write caches or battery
backed write cache on
RAID cards (way more
fsync/s)
• iostat -dmx <interval> is
your friend
10
SSD & Flash
• SSD
• much more IOPS than traditional disks
• lower latency
• make sure you have a new RAID controller
• Flash
• more IOPS than SSD
• very low latency
• InnoDB doublewrite buffer -- MariaDB 10.0, Percona
Server 5.6 (Fusion IO), MySQL 5.7
11
RAID
• RAID0 - fast writes, reads, no redundancy
• RAID1 - slower writes, fast reads
• RAID5 - slow for random writes, fast for
sequential writes, fast reads too but slow
recovery
• RAID10 - fast reads & writes
12
LVM
• Why?
• easily expand disk
• snapshot backups
• Why not?
• 2-3% performance penalty
• Snapshot penalties
13
Memory
• The more RAM the better -> reduces I/O requirements
• Use ECC RAM
• NUMA - “swap insanity”
• http://blog.jcole.us/2010/09/28/mysql-swap-insanity-and-the-
numa-architecture/
•numactl --interleave=all mysqld &
• Twitter patch/Percona Server 5.6
• numa_interleave option
• innodb_buffer_pool_populate - NUMA decisions
to be made when buffer cache is clean
14
Why does MySQL need
memory?
• Per-session buffers
• sort buffer, temp tables
• Metadata/locking
• index statistics, table definitions
• Caching data
• decrease reads: faster response time
• decrease random writes: queues write in cache;
perform more sequential writes
15
Where is memory
used?
• filesystem cache
• binary / relay logs
• MyISAM data relies on filesystem cache
• MySQL cache:
• innodb_buffer_pool_size (pages), MyISAM’s
key_buffer_size (indexes)
• Per session buffers
•sort_buffer_size, join_buffer_size,
read_buffer_size, tmp_table_size
•free -m / SHOW ENGINE INNODB STATUS
16
Huge pages
• 2M (4M even) pages vs 4K standard Linux
page
•vm.nr_hugepages=8192
• MySQL benefits from hugepages, MongoDB
doesn’t
17
Swappiness
• Controls how aggressively the system reclaims
“mapped” memory
• default: 60, vm.swappiness=0 is ok (but not for newer
kernels!)
• decrease: aggressive reclaiming of unmapped
pagecache memory
• increase: aggressive swapping of mapped memory
• 3.5 kernels change behaviour (and this was
backported to RHEL 2.6.32-303)
18
CPU
• default is ondemand, you should turn it to
performance generally
•echo "performance" > /sys/devices/
system/cpu/cpu0/cpufreq/
scaling_governor
• disable powersave mode
• cpufrequtils is where it’s at
• look at BIOS: turbo mode/C-state/OS power control
19
Network
• Tools: tc, dropwatch
• Use gigabit Ethernet (more bandwidth/
throughput, less latency)
• Can also trunk/bond for HA
20
Network II
• ARP filter - prevents ARP flux
•echo 1 > /proc/sys/net/ipv4/
conf/all/arp_filter
• MTU size at 9,000 - “jumbo frames”
• sar -n DEV
21
Network III
• allow more connections to queue up: echo 4096 > /
proc/sys/net/ipv4/tcp_max_syn_backlog
• /etc/sysctl.conf -
net.ipv4.tcp_max_syn_backlog = 4096
• increase kernel packet buffer:
net.core.netdev_max_backlog = 4096
• increase socket connection wait queue:
net.core.somaxconn = 4096
• Reduce TCP timeout that comes after closing socket (default
1m): net.ipv4.tcp_fin_timeout = 30
22
Network IV
• Fully synchronous replication, ala, Galera
Cluster? (NDBCluster too)
• Fastest as your slowest node
• evs.send_window + evs.user_send_window
(something large e.g. 512)
23
Resource Limits
• ulimits / /etc/security/limits.conf - they need to be
high/sensible over the defaults
• -f (file size): unlimited
• -t (cpu time): unlimited
• -v (virtmem): unlimited
• -n (open files): 64000
• -m (memsize): unlimited
• -u (processes/threads): 32000
24
Tune that database
• Focus on database design - find slow, crappy
queries and fix them (eg. mysql: pt-
query-digest)
• Reduce locking or time waiting - always
benchmark your application continually
• Don’t forget /etc/my.cnf (and appropriate
friends)
25
KVM/Xen/Virtualization
• Most of your raw database performance
comes from being hardware-centric
• KVM at device level you can turn off caching
• Native AIO used over threaded nowadays
• VMWare: http://kb.vmware.com/selfservice/
microsites/search.do?
language=en_US&cmd=displayKC&externalI
d=1008542
26
Containers
• Kubernetes - vitess.io rolls out w/o issue,
CoreOS, Docker
• Remember when benchmarking, you have
to look at local vs remote benchmarking
(networking can add overhead)
• 1 thread (up to 25% difference), but average
seems to be 15% loss for r/w workloads;
remotely? 32% is possible
27
EC2
• EC2 - instance limitations
• EBS - unpredictable I/O performance, use
RAID10 or RAID0
• RDS - similar performance between EBS
RAID10 MySQL & RDS
• choice of MySQL 5.7 (and older) or
MariaDB Server 10.0 or PostgreSQL
28
Why MariaDB/Percona
Server
• Threadpool
• NUMA interleaving
• Numerous performance fixes in XtraDB
like fast InnoDB restarts, buffer pool
warming, etc.
• Can run (supported) MariaDB Galera
Cluster/Percona XtraDB Cluster
29
Hardware overall
• Test everything
• Sometimes NIC’s are a bad batch or the
driver is buggy (RHEL5 + some Broadcom
NICs drop packets under high load - bnx2
before 2.6.33)
• Sometimes you get a bad batch of disk
30
Hadoop/Hbase
• running this in EC2 is problematic
• make sure name resolution works
• enable bonding
• networking: hadoop uses big buffers (64MB blocks by default)
• net.ipv4.tcp_rmem = 32768 436600 4194304
• net.ipv4.tcp_wmem = 32768 436600 4194304
• http://docs.hortonworks.com/HDPDocuments/HDP2/
HDP-2.1.3/bk_cluster-planning-guide/content/ch_hardware-
recommendations.html
31
Other databases
• MongoDB: http://docs.mongodb.org/manual/
administration/production-notes/
• PostgreSQL: http://wiki.postgresql.org/wiki/
Tuning_Your_PostgreSQL_Server
• Neo4j: http://docs.neo4j.org/chunked/stable/
configuration-linux-notes.html
• Riak: http://docs.basho.com/riak/1.4.0/
cookbooks/Linux-Performance-Tuning/
32
SELinux, firewalls,
security
• The easy way is to “disable SELinux”
• The reality is you should learn it
• Its just like a firewall that you really should
configure
33
Tools
• ps
• vmstat 1
• iostat
• top
• free
• sar (sar -n DEV 1)
• gdb
• tcpdump
• strace
• oprofile
• htop
• MySQL only: Percona
Toolkit (pt-diskstats, pt-
summary, pt-query-digest,
etc.)
34
Benchmarking
• sysbench
• OLTP test, use
tables with 20M
rows and 20M
transactions, check
1-128 threads/run
• LinkBench
• Yahoo! Cloud Serving
Benchmark
• https://github.com/
brianfrankcooper/
YCSB
• Google’s PerfKit
Benchmarker
• https://github.com/
GoogleCloudPlatfor
m/
PerfKitBenchmarke
r
35
Books
36
Resources
• http://doc.opensuse.org/products/draft/SLES/
SLES-tuning_sd_draft/book.sle.tuning.html
• https://access.redhat.com/site/documentation/
en-US/Red_Hat_Enterprise_Linux/6/html-single/
Performance_Tuning_Guide/index.html
• https://access.redhat.com/site/documentation/
en-US/Red_Hat_Enterprise_Linux/6/html-single/
Virtualization_Tuning_and_Optimization_Guide
/index.html
37
Thanks/Q&A
Colin Charles, colin@mariadb.com | byte@bytebot.net
http://bytebot.net/blog/ | @bytebot
slides: slideshare.net/bytebot/
Download MariaDB and give it a try: http://mariadb.org/
38

More Related Content

PDF
Meet MariaDB 10.1 at the Bulgaria Web Summit
PDF
Distributions from the view a package
PDF
MariaDB Server & MySQL Security Essentials 2016
PDF
The MySQL Server ecosystem in 2016
PDF
Meet MariaDB Server 10.1 London MySQL meetup December 2015
PDF
MariaDB - the "new" MySQL is 5 years old and everywhere (LinuxCon Europe 2015)
PDF
Lessons from database failures
PDF
Databases in the hosted cloud
Meet MariaDB 10.1 at the Bulgaria Web Summit
Distributions from the view a package
MariaDB Server & MySQL Security Essentials 2016
The MySQL Server ecosystem in 2016
Meet MariaDB Server 10.1 London MySQL meetup December 2015
MariaDB - the "new" MySQL is 5 years old and everywhere (LinuxCon Europe 2015)
Lessons from database failures
Databases in the hosted cloud

What's hot (20)

PDF
Better encryption & security with MariaDB 10.1 & MySQL 5.7
PDF
MariaDB 10.1 what's new and what's coming in 10.2 - Tokyo MariaDB Meetup
PDF
My first moments with MongoDB
PDF
Best practices for MySQL/MariaDB Server/Percona Server High Availability
PDF
Cool MariaDB Plugins
PDF
Securing your MySQL / MariaDB Server data
PDF
Lessons from database failures
PDF
A beginners guide to MariaDB
PDF
MariaDB 10 Tutorial - 13.11.11 - Percona Live London
PDF
MariaDB 10: The Complete Tutorial
PDF
The Complete MariaDB Server tutorial
PDF
Why MariaDB?
PDF
MariaDB 10 and what's new with the project
PDF
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
PDF
MariaDB 10: A MySQL Replacement - HKOSC
PDF
MariaDB Server Compatibility with MySQL
PDF
MySQL features missing in MariaDB Server
PDF
MariaDB: in-depth (hands on training in Seoul)
PDF
Lessons from database failures
PDF
The Complete MariaDB Server Tutorial - Percona Live 2015
Better encryption & security with MariaDB 10.1 & MySQL 5.7
MariaDB 10.1 what's new and what's coming in 10.2 - Tokyo MariaDB Meetup
My first moments with MongoDB
Best practices for MySQL/MariaDB Server/Percona Server High Availability
Cool MariaDB Plugins
Securing your MySQL / MariaDB Server data
Lessons from database failures
A beginners guide to MariaDB
MariaDB 10 Tutorial - 13.11.11 - Percona Live London
MariaDB 10: The Complete Tutorial
The Complete MariaDB Server tutorial
Why MariaDB?
MariaDB 10 and what's new with the project
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
MariaDB 10: A MySQL Replacement - HKOSC
MariaDB Server Compatibility with MySQL
MySQL features missing in MariaDB Server
MariaDB: in-depth (hands on training in Seoul)
Lessons from database failures
The Complete MariaDB Server Tutorial - Percona Live 2015
Ad

Viewers also liked (17)

PDF
Streaming replication in practice
PDF
GitLab PostgresMortem: Lessons Learned
ODP
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
PDF
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
PDF
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
PDF
Troubleshooting PostgreSQL Streaming Replication
PDF
Deep dive into PostgreSQL statistics.
PDF
MariaDB and Cassandra Interoperability
PPT
Opslag van long tail producten in e-warehouse
PPTX
Performance Tuning a Cloud Application: A Real World Case Study
PDF
Material Auxiliar Para Curso BáSico Msp430 1 A 54
PDF
Yahoo: Experiences with MySQL GTID and Multi Threaded Replication
PDF
Deep dive into PostgreSQL statistics.
PDF
PostgreSQL Meetup Berlin at Zalando HQ
PDF
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
PDF
Linux NUMA & Databases: Perils and Opportunities
PDF
Lessons from {distributed,remote,virtual} communities and companies
Streaming replication in practice
GitLab PostgresMortem: Lessons Learned
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
Troubleshooting PostgreSQL Streaming Replication
Deep dive into PostgreSQL statistics.
MariaDB and Cassandra Interoperability
Opslag van long tail producten in e-warehouse
Performance Tuning a Cloud Application: A Real World Case Study
Material Auxiliar Para Curso BáSico Msp430 1 A 54
Yahoo: Experiences with MySQL GTID and Multi Threaded Replication
Deep dive into PostgreSQL statistics.
PostgreSQL Meetup Berlin at Zalando HQ
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
Linux NUMA & Databases: Perils and Opportunities
Lessons from {distributed,remote,virtual} communities and companies
Ad

Similar to Tuning Linux for your database FLOSSUK 2016 (20)

PDF
OSDC 2016 - Tuning Linux for your Database by Colin Charles
PDF
Running MySQL on Linux
PPTX
Tuning Linux for MongoDB
PDF
MySQL Performance Tuning London Meetup June 2017
PPTX
High performace network of Cloud Native Taiwan User Group
PPTX
Tuning linux for mongo db
PPTX
Windows Server 2012 R2 Software-Defined Storage
PPTX
Introduction to TokuDB v7.5 and Read Free Replication
PDF
Mike Pittaro - High Performance Hardware for Data Analysis
PDF
High Performance Hardware for Data Analysis
PPTX
CPU Caches
PPTX
Oracle Performance On Linux X86 systems
KEY
Deployment Strategies (Mongo Austin)
PDF
Redis trouble shooting_eng
PDF
Colvin exadata mistakes_ioug_2014
PDF
High Performance Hardware for Data Analysis
PDF
High Performance Hardware for Data Analysis
PPTX
In-memory Caching in HDFS: Lower Latency, Same Great Taste
PPTX
Drupal performance
OSDC 2016 - Tuning Linux for your Database by Colin Charles
Running MySQL on Linux
Tuning Linux for MongoDB
MySQL Performance Tuning London Meetup June 2017
High performace network of Cloud Native Taiwan User Group
Tuning linux for mongo db
Windows Server 2012 R2 Software-Defined Storage
Introduction to TokuDB v7.5 and Read Free Replication
Mike Pittaro - High Performance Hardware for Data Analysis
High Performance Hardware for Data Analysis
CPU Caches
Oracle Performance On Linux X86 systems
Deployment Strategies (Mongo Austin)
Redis trouble shooting_eng
Colvin exadata mistakes_ioug_2014
High Performance Hardware for Data Analysis
High Performance Hardware for Data Analysis
In-memory Caching in HDFS: Lower Latency, Same Great Taste
Drupal performance

More from Colin Charles (10)

PDF
Differences between MariaDB 10.3 & MySQL 8.0
PDF
What is MariaDB Server 10.3?
PDF
Databases in the hosted cloud
PDF
The MySQL ecosystem - understanding it, not running away from it!
PDF
Databases in the Hosted Cloud
PDF
Best practices for MySQL High Availability Tutorial
PDF
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
PDF
Capacity planning for your data stores
PDF
Forking Successfully - or is a branch better?
PDF
The MySQL Server Ecosystem in 2016
Differences between MariaDB 10.3 & MySQL 8.0
What is MariaDB Server 10.3?
Databases in the hosted cloud
The MySQL ecosystem - understanding it, not running away from it!
Databases in the Hosted Cloud
Best practices for MySQL High Availability Tutorial
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
Capacity planning for your data stores
Forking Successfully - or is a branch better?
The MySQL Server Ecosystem in 2016

Recently uploaded (20)

PDF
Google’s NotebookLM Unveils Video Overviews
PPTX
Web Security: Login Bypass, SQLi, CSRF & XSS.pptx
PDF
Reimagining Insurance: Connected Data for Confident Decisions.pdf
PPTX
Belt and Road Supply Chain Finance Blockchain Solution
PDF
REPORT: Heating appliances market in Poland 2024
PDF
DevOps & Developer Experience Summer BBQ
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
KodekX | Application Modernization Development
PDF
creating-agentic-ai-solutions-leveraging-aws.pdf
PDF
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
PDF
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
PPTX
CroxyProxy Instagram Access id login.pptx
PPTX
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
ai-archetype-understanding-the-personality-of-agentic-ai.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
CIFDAQ's Token Spotlight: SKY - A Forgotten Giant's Comeback?
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
PDF
NewMind AI Monthly Chronicles - July 2025
Google’s NotebookLM Unveils Video Overviews
Web Security: Login Bypass, SQLi, CSRF & XSS.pptx
Reimagining Insurance: Connected Data for Confident Decisions.pdf
Belt and Road Supply Chain Finance Blockchain Solution
REPORT: Heating appliances market in Poland 2024
DevOps & Developer Experience Summer BBQ
Chapter 3 Spatial Domain Image Processing.pdf
KodekX | Application Modernization Development
creating-agentic-ai-solutions-leveraging-aws.pdf
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
CroxyProxy Instagram Access id login.pptx
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
Understanding_Digital_Forensics_Presentation.pptx
ai-archetype-understanding-the-personality-of-agentic-ai.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
CIFDAQ's Token Spotlight: SKY - A Forgotten Giant's Comeback?
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Automating ArcGIS Content Discovery with FME: A Real World Use Case
NewMind AI Monthly Chronicles - July 2025

Tuning Linux for your database FLOSSUK 2016

  • 1. Tuning Linux for your database Colin Charles,Team MariaDB, MariaDB Corporation [email protected] / [email protected] http://bytebot.net/blog/ | @bytebot on Twitter FLOSSUK 2016, London 16 March 2016 1
  • 2. whoami • Work on MariaDB at MariaDB Corporation (SkySQL Ab) • Merged with Monty Program Ab, makers of MariaDB • Formerly MySQL AB (exit: Sun Microsystems) • Past lives include Fedora Project (FESCO), OpenOffice.org • MySQL Community Contributor of theYear Award winner 2014 2
  • 3. Agenda • Hardware or cloud • I/O • Filesystems • Memory • CPU • Network • Resources 3
  • 4. Operating System • Focus of this talk & tools: Linux • But distributions make a difference too • like RHEL6 has tuned but Ubuntu doesn’t • Distribution versions can make a difference too • RHEL5: ktune; RHEL6: tuned; RHEL7: tuned throughput-performance 4
  • 5. Servers • When you buy servers... do you think in terms of CPU, then memory, then I/O? • Database servers clearly love I/O more than memory more than CPU • queries! scans of large tables? index scans with random I/O? BI? • Durability requires each transaction commit to be flushed to disk - i.e. call fsync() 5
  • 6. I/O • What kind of storage do you use? • SAS or SATA? • Ethernet (NAS, DRBD) • SSD • Fusion IO (NVMFS) 6
  • 7. Schedulers (I/O Elevators) • cfq: default, great for slower storage (SATA) • noop: low latency storage (SSD) • deadline: multi-process apps • Most database workloads benefit from the deadline scheduler (goal is after all to minimise seeks, prioritise process I/O) 7
  • 8. Elevators continued • Boot time: elevator=deadline •echo “deadline” > /sys/class/ block/sdaN/queue/scheduler • http://dimitrik.free.fr/blog/archives/2012/01/ mysql-performance-linux-io.html • http://www.mysqlperformanceblog.com/ 2009/01/30/linux-schedulers-in-tpcc-like- benchmark/ 8
  • 9. Sample elevator results 9 1 thread tps 1 thread ioutil% 8 threads tps 8 threads ioutil% deadline* 15000 <1% 19100 <1% deadline 6850 32% 15250 45% cfq 5880 45% 1240 94%
  • 10. File systems • Choices: ext4, XFS • mount options: • ext4: rw, nosuid, noatime, data=ordered, nobarrier • xfs: nobarrier • Turn off I/O barriers • http://lwn.net/Articles/ 283161/ • Separate files (data/logs/ undo/etc.) or not? • Don’t forget flash backed write caches or battery backed write cache on RAID cards (way more fsync/s) • iostat -dmx <interval> is your friend 10
  • 11. SSD & Flash • SSD • much more IOPS than traditional disks • lower latency • make sure you have a new RAID controller • Flash • more IOPS than SSD • very low latency • InnoDB doublewrite buffer -- MariaDB 10.0, Percona Server 5.6 (Fusion IO), MySQL 5.7 11
  • 12. RAID • RAID0 - fast writes, reads, no redundancy • RAID1 - slower writes, fast reads • RAID5 - slow for random writes, fast for sequential writes, fast reads too but slow recovery • RAID10 - fast reads & writes 12
  • 13. LVM • Why? • easily expand disk • snapshot backups • Why not? • 2-3% performance penalty • Snapshot penalties 13
  • 14. Memory • The more RAM the better -> reduces I/O requirements • Use ECC RAM • NUMA - “swap insanity” • http://blog.jcole.us/2010/09/28/mysql-swap-insanity-and-the- numa-architecture/ •numactl --interleave=all mysqld & • Twitter patch/Percona Server 5.6 • numa_interleave option • innodb_buffer_pool_populate - NUMA decisions to be made when buffer cache is clean 14
  • 15. Why does MySQL need memory? • Per-session buffers • sort buffer, temp tables • Metadata/locking • index statistics, table definitions • Caching data • decrease reads: faster response time • decrease random writes: queues write in cache; perform more sequential writes 15
  • 16. Where is memory used? • filesystem cache • binary / relay logs • MyISAM data relies on filesystem cache • MySQL cache: • innodb_buffer_pool_size (pages), MyISAM’s key_buffer_size (indexes) • Per session buffers •sort_buffer_size, join_buffer_size, read_buffer_size, tmp_table_size •free -m / SHOW ENGINE INNODB STATUS 16
  • 17. Huge pages • 2M (4M even) pages vs 4K standard Linux page •vm.nr_hugepages=8192 • MySQL benefits from hugepages, MongoDB doesn’t 17
  • 18. Swappiness • Controls how aggressively the system reclaims “mapped” memory • default: 60, vm.swappiness=0 is ok (but not for newer kernels!) • decrease: aggressive reclaiming of unmapped pagecache memory • increase: aggressive swapping of mapped memory • 3.5 kernels change behaviour (and this was backported to RHEL 2.6.32-303) 18
  • 19. CPU • default is ondemand, you should turn it to performance generally •echo "performance" > /sys/devices/ system/cpu/cpu0/cpufreq/ scaling_governor • disable powersave mode • cpufrequtils is where it’s at • look at BIOS: turbo mode/C-state/OS power control 19
  • 20. Network • Tools: tc, dropwatch • Use gigabit Ethernet (more bandwidth/ throughput, less latency) • Can also trunk/bond for HA 20
  • 21. Network II • ARP filter - prevents ARP flux •echo 1 > /proc/sys/net/ipv4/ conf/all/arp_filter • MTU size at 9,000 - “jumbo frames” • sar -n DEV 21
  • 22. Network III • allow more connections to queue up: echo 4096 > / proc/sys/net/ipv4/tcp_max_syn_backlog • /etc/sysctl.conf - net.ipv4.tcp_max_syn_backlog = 4096 • increase kernel packet buffer: net.core.netdev_max_backlog = 4096 • increase socket connection wait queue: net.core.somaxconn = 4096 • Reduce TCP timeout that comes after closing socket (default 1m): net.ipv4.tcp_fin_timeout = 30 22
  • 23. Network IV • Fully synchronous replication, ala, Galera Cluster? (NDBCluster too) • Fastest as your slowest node • evs.send_window + evs.user_send_window (something large e.g. 512) 23
  • 24. Resource Limits • ulimits / /etc/security/limits.conf - they need to be high/sensible over the defaults • -f (file size): unlimited • -t (cpu time): unlimited • -v (virtmem): unlimited • -n (open files): 64000 • -m (memsize): unlimited • -u (processes/threads): 32000 24
  • 25. Tune that database • Focus on database design - find slow, crappy queries and fix them (eg. mysql: pt- query-digest) • Reduce locking or time waiting - always benchmark your application continually • Don’t forget /etc/my.cnf (and appropriate friends) 25
  • 26. KVM/Xen/Virtualization • Most of your raw database performance comes from being hardware-centric • KVM at device level you can turn off caching • Native AIO used over threaded nowadays • VMWare: http://kb.vmware.com/selfservice/ microsites/search.do? language=en_US&cmd=displayKC&externalI d=1008542 26
  • 27. Containers • Kubernetes - vitess.io rolls out w/o issue, CoreOS, Docker • Remember when benchmarking, you have to look at local vs remote benchmarking (networking can add overhead) • 1 thread (up to 25% difference), but average seems to be 15% loss for r/w workloads; remotely? 32% is possible 27
  • 28. EC2 • EC2 - instance limitations • EBS - unpredictable I/O performance, use RAID10 or RAID0 • RDS - similar performance between EBS RAID10 MySQL & RDS • choice of MySQL 5.7 (and older) or MariaDB Server 10.0 or PostgreSQL 28
  • 29. Why MariaDB/Percona Server • Threadpool • NUMA interleaving • Numerous performance fixes in XtraDB like fast InnoDB restarts, buffer pool warming, etc. • Can run (supported) MariaDB Galera Cluster/Percona XtraDB Cluster 29
  • 30. Hardware overall • Test everything • Sometimes NIC’s are a bad batch or the driver is buggy (RHEL5 + some Broadcom NICs drop packets under high load - bnx2 before 2.6.33) • Sometimes you get a bad batch of disk 30
  • 31. Hadoop/Hbase • running this in EC2 is problematic • make sure name resolution works • enable bonding • networking: hadoop uses big buffers (64MB blocks by default) • net.ipv4.tcp_rmem = 32768 436600 4194304 • net.ipv4.tcp_wmem = 32768 436600 4194304 • http://docs.hortonworks.com/HDPDocuments/HDP2/ HDP-2.1.3/bk_cluster-planning-guide/content/ch_hardware- recommendations.html 31
  • 32. Other databases • MongoDB: http://docs.mongodb.org/manual/ administration/production-notes/ • PostgreSQL: http://wiki.postgresql.org/wiki/ Tuning_Your_PostgreSQL_Server • Neo4j: http://docs.neo4j.org/chunked/stable/ configuration-linux-notes.html • Riak: http://docs.basho.com/riak/1.4.0/ cookbooks/Linux-Performance-Tuning/ 32
  • 33. SELinux, firewalls, security • The easy way is to “disable SELinux” • The reality is you should learn it • Its just like a firewall that you really should configure 33
  • 34. Tools • ps • vmstat 1 • iostat • top • free • sar (sar -n DEV 1) • gdb • tcpdump • strace • oprofile • htop • MySQL only: Percona Toolkit (pt-diskstats, pt- summary, pt-query-digest, etc.) 34
  • 35. Benchmarking • sysbench • OLTP test, use tables with 20M rows and 20M transactions, check 1-128 threads/run • LinkBench • Yahoo! Cloud Serving Benchmark • https://github.com/ brianfrankcooper/ YCSB • Google’s PerfKit Benchmarker • https://github.com/ GoogleCloudPlatfor m/ PerfKitBenchmarke r 35
  • 38. Thanks/Q&A Colin Charles, [email protected] | [email protected] http://bytebot.net/blog/ | @bytebot slides: slideshare.net/bytebot/ Download MariaDB and give it a try: http://mariadb.org/ 38