HyperDB, MySQL Performance, & Flavors of MySQL

1,685 views

Published on

HyperDB, MySQL Performance, & Flavors of MySQL

Published in: Software
1 Comment
1 Like
Statistics
Notes
  • This was a really great deck - thanks for the share! ...got a few more good research links on HyperDB? config examples are really helpful sometimes =)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
1,685
On SlideShare
0
From Embeds
0
Number of Embeds
217
Actions
Shares
0
Downloads
12
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

HyperDB, MySQL Performance, & Flavors of MySQL

  1. 1. Anthropomorphic Design Making a Better WordPress with Jazz Hands + =
  2. 2. But seriously….
  3. 3. HyperDB, MySQL Performance, & Flavors of MySQL Evan Volgas
  4. 4. About me • 10 years working with data — as an analyst, a DBA, etc • Currently a data engineer for WhatRunsWhere • Data Engineer = DBA + Map Reduce + PTSD from Apache Zookeeper • Worked with WordPress off/on for about ~5 years
  5. 5. Disclaimers I believe • Google exists • You can use it • You don’t enjoy reading a bunch of code and config files in a presentation any more than I do • WordCamp needs more cowbell
  6. 6. What is HyberDB? • “Very advanced database class” • Powers WordPress.com • Supports replication, partitioning, load balancing, etc
  7. 7. “Very advanced database class” find 'hyperdb/' -name '*.php' | xargs wc -l • HyperDB: 1,401 lines of PHP • WordPress: 255,961 lines of PHP • Hello Dolly: 81 lines of PHP • Yoast’s Google Analytics 16,174 lines of PHP
  8. 8. Why’d you have to go and make things so complicated • The complexity of HyperDB has nothing to do with the PHP code itself • Implementing HyperDB itself is mostly configuration • To the extent that HyperDB is advanced, it’s because MySQL has a lot of advanced stuff going on underneath the hood
  9. 9. Who cares about MySQL? An argument from fellow WordCamp ATL presenter Tom McFarlin* • Employers haven’t fully figured out what WordPress *can* do • WordPress makes it easy to be a software implementer as opposed to a software developer so in a lot of cases salaries probably should be lower • The WordPress community itself hasn’t educated employers, customers, or software implementors how classical software development / engineering can fit into the WordPress ecosystem *https://tommcfarlin.com/wordpress-developer- salary/
  10. 10. Tell me again why this matters • We don’t need any more social media icons plugin • Many of the things that are really pushing the WordPress envelope are VERY database intensive and their performance needs are poorly understood • There are a million things you can (and should) do to optimize your WordPress website. When those stop being enough, it’d be a good idea to know some DB basics
  11. 11. HyperDB • For practical extents and purposes, it’s kind of like a giant wp-config.php that pertains to your database • A lot of great resources for setting it up. If you decide you want to try it, make sure you check out https://www.digitalocean.com/community/tutorials/how-to-optimize-wordpress- performance-with-mysql-replication-on-ubuntu-14-04 http://wpguru.co.uk/2010/07/testing-hyperdb/ http://codertalks.com/configuring-hyperdb-to-use-multiple-databases-for-buddypress- multisite/
  12. 12. MySQL Lingo + Discussion • Replication • Statement vs Row-based • Master vs Slave • Partitioning • Tends to either really help or really hurt you — very little in between • NB: One of the reasons NoSQL has market adoption is because this is very painful • Latency matters: https://gist.github.com/jboner/2841832 • Failover • Load Balancing • DB: HyperDB • Web app: HA Proxy, Nginx, etc
  13. 13. MySQL Performance Basics • innodb_buffer_pool_size: 70-80% of memory is common • innodb_buffer_pool_instances: if you have a lot of memory, you might run into bottlenecks where multiple threads are trying to access the buffer pool. Splitting it up into multiple buffer pools can help • innodb_file_per_table: if you are using < MySQL 5.6, turn this on. Trust me. • max_connections: if you ever think you need to tweak this, double check that your connections are terminating properly • log_bin: your master nodes needs this • slow-query-log, slow-query-log-file, long_query_time: log your slow queries. Don’t go crazy, but periodically log everything and analyze it
  14. 14. MySQL Best Practices Monitor everything • New Relic, Datadog, Zabbix, graphite/statsd/collectd • http://www.percona.com/live/mysql-conference- 2013/sites/default/files/slides/percona-live-santa-clara-2013-presentation- spilgames-mysql-statsd.pdf <— Interesting idea Analyze your queries • pt-query-digest, mysqldumpslow, plugins for third party monitoring Learn how to reason about the Query Execution Plan • http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/ Schedule DB maintenance
  15. 15. Flavors of MySQL • MySQL • MariaDB • https://mariadb.com/blog/how-install-and-run- wordpress-mariadb • Percona: • https://www.digitalocean.com/community/tutorials/ho w-to-install-a-fresh-percona-server-or-replace-mysql
  16. 16. Special Mention Percona Toolkit • http://www.percona.com/doc/percona-toolkit/2.2/ pt-query-digest --since '2014-11-01' --filter '$event->{arg} =~ m/^select/i' /var/log/mysql/slow-query.log > /tmp/pt_slow_since_nov2014 Nginx + PHP-FPM • http://www.raspipress.com/2014/06/tutorial-install-wordpress-on-a- raspberry-pi-using-nginx/ Learn from people within WordPress and from outside of it • good example: https://roots.io/twelve-factor-wordpress/

×