Erfo Rma Nce With L5. 1 An D5. 5 Tion Ing: Giuseppe Maxia Mysql Community Team Lead Sun Microsystems
Erfo Rma Nce With L5. 1 An D5. 5 Tion Ing: Giuseppe Maxia Mysql Community Team Lead Sun Microsystems
n c e
r m a 5 .5
e r fo and
s t p 5 .1
B oo Q L in g
y S it io n
M r t
pa
Giuseppe Maxia
MySQL Community
Team Lead
Sun Microsystems
Wednesday, 13 January 2010
Who's this guy?
about me
2
YOUR
NEEDS 6
data
RAM
INDEXES
data INDEXES
INDEXES
RAM
data INDEXES
10
WHAT
11
12
13
TRANSPARENT SQL
14
15
16
17
18
19
20
21
22
23
24
25
26
select *
from
table_name
where colx =
120
select *
from
table_name
where colx =
350
select *
from
table_name
where colx
between 120
and 230
100-199
select *
from
200-299 table_name
where colx =
300-399 120
400-499
500-599
Wednesday, 13 January 2010
Partition pruning
2b - table partitioned by colx - SINGLE REC
1-99
100-199
select *
from
200-299 table_name
where colx =
300-399 350
400-499
500-599
Wednesday, 13 January 2010
Partition pruning
2c - table partitioned by colx - RANGE
1-99
select *
100-199 from
table_name
200-299
where colx
300-399 between 120
and 230
400-499
500-599
Wednesday, 13 January 2010
MySQL 5.1 partitions
WHY
33
34
HOW
35
•RTFM ...
• No, seriously, the manual has everything
• But if you absolutely insist ...
36
39
40
)
Wednesday, 13 January 2010
PARTITIONING BY DATE
CREATE TABLE t1 (
d date
) ENGINE=InnoDB
PARTITION BY RANGE (to_days(d))
(
PARTITION P1 VALUES
LESS THAN (to_days('1999-01-01')),
PARTITION P2 VALUES
LESS THAN (to_days('2000-01-01'))
43
)
Wednesday, 13 January 2010
MySQL 5.1 partitions
WHEN
44
45
HANDS
ON 46
48
...
| p13 | year(from_date) | 1997 |
| p14 | year(from_date) | 1998 |
| p15 | year(from_date) | 1999 |
| p16 | year(from_date) | 2000 |
...
| p19 | year(from_date) | MAXVALUE |
+-------+-----------------+----------+ 49
50
# NOT PARTITIONED 51
# partition p15
52
# NOT PARTITIONED
53
# partition p16
54
# NOT PARTITIONED
55
56
LEVERAGING
REPLICATION
57
INNODB MyISAM
PARTITIONED PARTITIONED
BY RANGE BY RANGE
SLAVE SLAVE
58
concurrent batch processing large batch processing
Wednesday, 13 January 2010
Replication schemes
concurrent insert
INNODB
PARTITIONED
MASTER
INNODB
NON
MyISAM PARTITIONED
SLAVE PARTITIONED
SLAVE
59
batch processing concurrent reads
Wednesday, 13 January 2010
MySQL 5.1 partitions
PITFALLS
60
61
...
Wednesday, 13 January 2010
EXPLAIN
explain partitions select count(*)
from salaries where from_date
between '1998-01-01' and
'1998-12-31'\G
***** 1. row ****
id: 1
select_type: SIMPLE
table: salaries
partitions: p14,p15
...
65
BENCHMARKS
66
engine storage
(MB)
innodb 221
myisam 181
archive 74
innodb partitioned (whole) 289
innodb partitioned (file per table) 676
myisam partitioned 182
archive partitioned 72
engine storage
(GB)
innodb (with PK) 330
myisam (with PK) 141
archive 13
innodb partitioned (no PK) 237
myisam partitioned (no PK) 107
archive partitioned 13
TOOLS
71
72
TIPS
73
74
76
NEW
FEATURES
77
78
(a < 10)
OR
((a = 10) AND (b < 10))
(1 < 10)
OR TRUE
((1 = 10) AND (10 < 10))
Wednesday, 13 January 2010
partition definition
by range (a,b)
records partition LESS THAN
a b p01 10 10
1 10 p02 10 20
10 9 p03 10 30
10 10 p04 10 MAXVALUE
10 11 p05 MAXVALUE MAXVALUE
(a < 10)
OR
((a = 10) AND (b < 10))
(10 < 10)
OR TRUE
((10 = 10) AND (9 < 10))
Wednesday, 13 January 2010
partition definition
by range (a,b)
records partition LESS THAN
a b p01 10 10
1 10 p02 10 20
10 9 p03 10 30
10 10 p04 10 MAXVALUE
10 11 p05 MAXVALUE MAXVALUE
(a < 10)
OR
((a = 10) AND (b < 10))
(10 < 10)
OR FALSE
((10 = 10) AND (10 < 10))
Wednesday, 13 January 2010
partition definition
by range (a,b)
records partition LESS THAN
a b p01 10 10
1 10 p02 10 20
10 9 p03 10 30
10 10 p04 10 MAXVALUE
10 11 p05 MAXVALUE MAXVALUE
(a < 10)
OR
((a = 10) AND (b < 20))
(10 < 10)
OR TRUE
((10 = 10) AND (10 < 20))
Wednesday, 13 January 2010
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)
89
90
COMING
SOON
91
92
• official docs
http://dev.mysql.com/doc
• my blog
http://datacharmer.blogspot.com
93
Giuseppe Maxia
http://datacharmer.blogspot.com
[email protected]
Wednesday, 13 January 2010
MySQL 5.1 partitions
BONUS
SLIDES
95
ANNOYANCES
96
97
98
99
)
Wednesday, 13 January 2010
Annoyances with partitions
CREATE TABLE `t1` (
`d` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT
CHARSET=latin1
/*!50100 PARTITION BY RANGE (to_days
(d))
(PARTITION P1 VALUES LESS THAN
(730120) ENGINE = InnoDB,
PARTITION P2 VALUES LESS THAN
(730485) ENGINE = InnoDB) */
101