This document discusses MySQL features for the enterprise. It provides an overview of MySQL main features including ease of use, reliability, performance and scalability. It summarizes new features in MySQL 5.5 like the InnoDB storage engine being default, the performance schema for monitoring, and enhancements to partitioning. It also discusses leveraging replication for tasks like backup, analytics and partitioning strategies.
Breaking the Kubernetes Kill Chain: Host Path Mount
MySQL Enterprise Features and Performance
1. MySQL
Features for the enterprise
Giuseppe Maxia
QA Director
Continuent, Inc
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License. To view a
copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons,
171 Second Street, Suite 300, San Francisco, California, 94105, USA.
Wednesday, December 1, 2010
2. about me - Giuseppe Maxia
• a.k.a. The Data Charmer
• QA Director at Continuent, Inc
• Long time hacking with MySQL features
• Formerly, MySQL community manager, database
consultant, designer, coder.
• A passion for QA, open source, and community
• Blogger
•http://datacharmer.blogspot.com
Wednesday, December 1, 2010
3. Contents
• Refresh of MySQL main features
• Future: MySQL 5.5
✦ performance (InnoDB default engine,
Performance schema)
✦ ease of use (partitioning, SIGNAL)
✦ reliability (semisynch replication)
• Current: MySQL 5.1
✦ performance: InnoDB plugin 1.0.13
Wednesday, December 1, 2010
4. Contents
• Refresh of MySQL main features
• Future: MySQL 5.5
✦ performance (InnoDB default engine,
Performance schema)
✦ ease of use (partitioning, SIGNAL)
✦ reliability (semisynch replication)
• Current: MySQL 5.1
✦ performance: InnoDB plugin 1.0.13
Wednesday, December 1, 2010
5. Main features
• Ease of use
• Installation
• Maintenance
• Reliability
• ACID compliant
• Built-in replication
• Performance
• Scalable
• Built-in partitioning
Wednesday, December 1, 2010
6. And more ...
• Stored routines
• Triggers
• Views
• Information and performance schema
• Event scheduler
• Pluggable functions
• Pluggable storage engines
Wednesday, December 1, 2010
21. Replication assessment
without replication with replication
database handling
performance
Point in Time recovery
failover
write scaling
backup
read scaling
easy harder
high lower (binary logs)
none easy
none possible
none minimal
with downtime without downtime
none easy
Wednesday, December 1, 2010
23. Remember the MERGE tables?
!separate tables
!risk of duplicates
!insert in each table
!no constraints
MERGE TABLE
Wednesday, December 1, 2010
24. It isn't a merge table!
!One table
!No risk of duplicates
!insert in one table
!constraints enforced
PARTITIONED TABLE
Wednesday, December 1, 2010
25. Partition pruning
1a - unpartitioned table - SINGLE RECORD
select *
from
table_name
where colx =
120
Wednesday, December 1, 2010
26. Partition pruning
1a - unpartitioned table - SINGLE RECORD
select *
from
table_name
where colx =
120
I
N
D
E
X
D
A
T
A
Wednesday, December 1, 2010
27. Partition pruning
1c - unpartitioned table - RANGE
select *
from
table_name
where colx
between 120
and 230
Wednesday, December 1, 2010
28. Partition pruning
2a - table partitioned by colx - SINGLE REC
select *
from
table_name
where colx =
120
100-199
1-99
200-299
300-399
400-499
500-599
Wednesday, December 1, 2010
29. Partition pruning
2a - table partitioned by colx - SINGLE REC
select *
from
table_name
where colx =
120
D
A
T
A I
N
D
E
X
100-199
1-99
200-299
300-399
400-499
500-599
Wednesday, December 1, 2010
30. Partition pruning
2b - table partitioned by colx - SINGLE REC
select *
from
table_name
where colx =
350
100-199
1-99
200-299
300-399
400-499
500-599
Wednesday, December 1, 2010
31. Partition pruning
2c - table partitioned by colx - RANGE
100-199
1-99
200-299
300-399
400-499
500-599
select *
from
table_name
where colx
between 120
and 230
Wednesday, December 1, 2010
32. Benchmarking results (huge server)
engine 6 month range
InnoDB 4 min 30s
MyISAM 25.03s
Archive 22 min 25s
InnoDB partitioned by month 13.19
MyISAM partitioned by year 6.31
MyISAM partitioned by month 4.45
Archive partitioned by year 16.67
Archive partitioned by month 8.97
Wednesday, December 1, 2010
39. Contents
• Refresh of MySQL main features
• Future: MySQL 5.5
✦ performance (InnoDB default engine,
Performance schema)
✦ ease of use (partitioning, SIGNAL)
✦ reliability (semisynch replication)
• Current: MySQL 5.1
✦ performance: InnoDB plugin 1.0.13
Wednesday, December 1, 2010
40. MySQL 5.5
• MySQL 5.5.7-rc released in November
• MySQL 5.5.x-GA coming in December
• Default storage engine is now InnoDB
• Lots of goodies
Wednesday, December 1, 2010
41. Contents
• Refresh of MySQL main features
• Future: MySQL 5.5
✦ performance (InnoDB default
engine, Performance schema)
✦ ease of use (partitioning, SIGNAL)
✦ reliability (semisynch replication)
• Current: MySQL 5.1
✦ performance: InnoDB plugin 1.0.13
Wednesday, December 1, 2010
44. InnoDB at a glance
• Performance Improvements
✦ Improved recovery performance
✦ Multiple buffer pool instances
✦ Multiple rollback segments
✦ Native asynchronous I/O for Linux
✦ Extended change buffering
Wednesday, December 1, 2010
45. Faster!
• How fast?
• In my benchmarks, 10% to 50% faster.
• Others have reported much higher gains.
• You decide.
• Test it under your load.
Wednesday, December 1, 2010
46. Contents
• Refresh of MySQL main features
• Future: MySQL 5.5
✦ performance (InnoDB default engine,
Performance schema)
✦ ease of use (partitioning, SIGNAL)
✦ reliability (semisynch replication)
• Current: MySQL 5.1
✦ performance: InnoDB plugin 1.0.13
Wednesday, December 1, 2010
47. PERFORMANCE
SCHEMA
• PERFORMANCE_SCHEMA presents low level
MySQL performance information
• Data can be cleared
• Filters with WHERE are allowed
• Must be enabled with --performance_schema
Wednesday, December 1, 2010
49. performance schema
mysql> UPDATE SETUP_INSTRUMENTS
SET ENABLED = 'NO'
WHERE NAME =
'wait/synch/mutex/myisammrg/MYRG_INFO::mutex';
mysql> UPDATE SETUP_CONSUMERS
SET ENABLED = 'NO'
WHERE NAME = 'file_summary_by_instance';
Wednesday, December 1, 2010
50. Contents
• Refresh of MySQL main features
• Future: MySQL 5.5
✦ performance (InnoDB default engine,
Performance schema)
✦ ease of use (partitioning, SIGNAL)
✦ reliability (semisynch replication)
• Current: MySQL 5.1
✦ performance: InnoDB plugin 1.0.13
Wednesday, December 1, 2010
51. MySQL 5.5 enhancements
• PARTITION BY RANGE COLUMNS
• PARTITION BY LIST COLUMNS
• TO_SECONDS
51
Wednesday, December 1, 2010
52. MySQL 5.5 enhancements
52
CREATE TABLE t (
dt date
)
PARTITION BY RANGE (TO_DAYS(dt))
(
PARTITION p01 VALUES LESS THAN
(TO_DAYS('2007-01-01')),
PARTITION p02 VALUES LESS THAN
(TO_DAYS('2008-01-01')),
PARTITION p03 VALUES LESS THAN
(TO_DAYS('2009-01-01')),
PARTITION p04 VALUES LESS THAN
(MAXVALUE));
BEFO
RE
5.1
Wednesday, December 1, 2010
53. MySQL 5.5 enhancements
53
SHOW CREATE TABLE t G
Table: t
Create Table: CREATE TABLE `t` (
`dt` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (TO_DAYS
(dt))
(PARTITION p01 VALUES LESS THAN (733042)
ENGINE = MyISAM,
[…]
BEFO
RE
5.1
Wednesday, December 1, 2010
54. MySQL 5.5 enhancements
54
CREATE TABLE t (
dt date
)
PARTITION BY RANGE COLUMNS (dt)
(
PARTITION p01 VALUES LESS THAN
('2007-01-01'),
PARTITION p02 VALUES LESS THAN
('2008-01-01'),
PARTITION p03 VALUES LESS THAN
('2009-01-01'),
PARTITION p04 VALUES LESS THAN
(MAXVALUE));
AFTER
5.5
Wednesday, December 1, 2010
55. MySQL 5.5 enhancements
55
SHOW CREATE TABLE t
Table: t
Create Table: CREATE TABLE `t` (
`dt` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
/*!50500 PARTITION BY RANGE COLUMNS
(dt)
(PARTITION p01 VALUES LESS THAN
('2007-01-01') ENGINE = MyISAM,
[…]
AFTER
5.5
Wednesday, December 1, 2010
56. MySQL 5.5 - Multiple columns
56
CREATE TABLE t (
a int,
b int
)PARTITION BY RANGE COLUMNS (a,b)
(
PARTITION p01 VALUES LESS THAN
(10,1),
PARTITION p02 VALUES LESS THAN
(10,10),
PARTITION p03 VALUES LESS THAN
(10,20),
PARTITION p04 VALUES LESS THAN
(MAXVALUE, MAXVALUE));
Wednesday, December 1, 2010
57. 57
CREATE TABLE employees (
emp_no int(11) NOT NULL,
birth_date date NOT NULL,
first_name varchar(14) NOT NULL,
last_name varchar(16) NOT NULL,
gender char(1) DEFAULT NULL,
hire_date date NOT NULL
) ENGINE=MyISAM
PARTITION BY RANGE COLUMNS(gender,hire_date)
(PARTITION p01 VALUES LESS THAN ('F','1990-01-01'),
PARTITION p02 VALUES LESS THAN ('F','2000-01-01'),
PARTITION p03 VALUES LESS THAN ('F',MAXVALUE),
PARTITION p04 VALUES LESS THAN ('M','1990-01-01'),
PARTITION p05 VALUES LESS THAN ('M','2000-01-01'),
PARTITION p06 VALUES LESS THAN ('M',MAXVALUE),
PARTITION p07 VALUES LESS THAN (MAXVALUE,MAXVALUE)
Wednesday, December 1, 2010
59. Contents
• Refresh of MySQL main features
• Future: MySQL 5.5
✦ performance (InnoDB default engine,
Performance schema)
✦ ease of use (partitioning, SIGNAL)
✦ reliability (semisynch replication)
• Current: MySQL 5.1
✦ performance: InnoDB plugin 1.0.13
Wednesday, December 1, 2010
60. SIGNAL and RESIGNAL
• Allow error handling in stored routines
• The execution is passed to an error
handler
• Accessible error values are SQLSTATE,
MESSAGE_TEXT and
MYSQL_ERRNO
• RESIGNAL can pass along the original
or a new information
Wednesday, December 1, 2010
61. Contents
• Refresh of MySQL main features
• Future: MySQL 5.5
✦ performance (InnoDB default engine,
Performance schema)
✦ ease of use (partitioning, SIGNAL)
✦ reliability (semisynch replication)
• Current: MySQL 5.1
✦ performance: InnoDB plugin 1.0.13
Wednesday, December 1, 2010
68. Contents
• Refresh of MySQL main features
• Future: MySQL 5.5
✦ performance (InnoDB default engine,
Performance schema)
✦ ease of use (partitioning, SIGNAL)
✦ reliability (semisynch replication)
• Current: MySQL 5.1
✦ performance: InnoDB plugin 1.0.13
Wednesday, December 1, 2010
69. Missed announcement
• A GA release
• As of MySQL 5.1.47
• The InnoDB plugin is GA
• Ready to use for immediate gains
Wednesday, December 1, 2010
80. Installation - 2nd method (5)
SET GLOBAL innodb_fast_shutdown=0;
RESTART the server
Wednesday, December 1, 2010
81. Installation differences
• Method 1 (plugin-load in my.cnf)
✦ Only one operation
✦ But error prone (one looooong command)
✦ plugins not stored in mysql.plugin table
• Method 2 (install plugin)
✦ plugin info saved to mysql.plugin table
✦ Easier to write
✦ 2 restarts required
Wednesday, December 1, 2010
82. CAVEAT
• If you uninstall the InnoDB plugin, remember:
✦ The tables are not backward compatible
✦ You must uninstall all the
INFORMATION_SCHEMA plugin tables
BEFORE removing the InnoDB plugin
✦ If the plugin is busy, it may not be removed until
you restart the server
Wednesday, December 1, 2010
88. getting locks information
SELECT
r.trx_id waiting_trx_id,
r.trx_mysql_thread_id waiting_thread,
r.trx_query waiting_query,
b.trx_id blocking_trx_id,
b.trx_mysql_thread_id blocking_thread,
b.trx_query blocking_query
FROM
innodb_lock_waits w
INNER JOIN innodb_trx b
ON b.trx_id = w.blocking_trx_id
INNER JOIN innodb_trx r
ON r.trx_id = w.requesting_trx_id
Wednesday, December 1, 2010
90. getting locks information
************* 1. row **************
waiting_trx_id: 711
waiting_thread: 3
waiting_query: select c from t1 for
update
blocking_trx_id: 710
blocking_thread: 2
blocking_query: select i from t1 for
update
Wednesday, December 1, 2010
91. getting locks information
************* 2. row **************
waiting_trx_id: 711
waiting_thread: 3
waiting_query: select c from t1 for
update
blocking_trx_id: 70F
blocking_thread: 1
blocking_query: NULL
Wednesday, December 1, 2010
92. getting locks information
************* 3. row **************
waiting_trx_id: 710
waiting_thread: 2
waiting_query: select i from t1 for
update
blocking_trx_id: 70F
blocking_thread: 1
blocking_query: NULL
Wednesday, December 1, 2010
99. e-mail: datacharmer@continuent.com
Twitter: @datacharmer
Contact Information
Continuent Web Site:
http://www.continuent.com
Tungsten Project
http://sourceforge.net/projects/tungsten
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License. To
view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to
Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
Wednesday, December 1, 2010