~percona-toolkit-dev/percona-toolkit/mysql-5.6-test-fixes

« back to all changes in this revision

Viewing changes to t/pt-index-usage/save_results.t

  • Committer: Daniel Nichter
  • Date: 2011-06-24 22:02:05 UTC
  • Revision ID: daniel@percona.com-20110624220205-e779cao9hcwyly1w
Add forked Maatkit tools in bin/ and their tests in t/.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env perl
 
2
 
 
3
BEGIN {
 
4
   die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
 
5
      unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
 
6
   unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
 
7
};
 
8
 
 
9
use strict;
 
10
use warnings FATAL => 'all';
 
11
use English qw(-no_match_vars);
 
12
use Test::More;
 
13
 
 
14
use MaatkitTest;
 
15
# See http://code.google.com/p/maatkit/wiki/Testing
 
16
shift @INC;  # MaatkitTest's unshift
 
17
require "$trunk/bin/pt-index-usage";
 
18
 
 
19
use Sandbox;
 
20
my $dp  = new DSNParser(opts=>$dsn_opts);
 
21
my $sb  = new Sandbox(basedir => '/tmp', DSNParser => $dp);
 
22
my $dbh = $sb->get_dbh_for('master');
 
23
 
 
24
if ( !$dbh ) {
 
25
   plan skip_all => 'Cannot connect to sandbox master';
 
26
}
 
27
if ( !@{ $dbh->selectall_arrayref('show databases like "sakila"') } ) {
 
28
   plan skip_all => "Sakila database is not loaded";
 
29
}
 
30
else {
 
31
   plan tests => 17;
 
32
}
 
33
 
 
34
my $cnf     = '/tmp/12345/my.sandbox.cnf';
 
35
my @args    = ('-F', $cnf, '--save-results-database', 'D=mk');
 
36
my $samples = "t/pt-index-usage/samples/";
 
37
my $output;
 
38
 
 
39
$sb->wipe_clean($dbh);
 
40
 
 
41
mk_index_usage::main(@args, "$trunk/t/lib/samples/empty",
 
42
   qw(--empty-save-results --create-save-results-database --no-report),
 
43
   '-t', 'sakila.actor,sakila.address');
 
44
 
 
45
$dbh->do("use mk");
 
46
 
 
47
my $rows = $dbh->selectcol_arrayref("show databases");
 
48
my $ok   = grep { $_ eq "mk" } @$rows;
 
49
ok(
 
50
   $ok,
 
51
   "--create-save-results-databse"
 
52
);
 
53
 
 
54
$rows = $dbh->selectcol_arrayref("show tables from `mk`");
 
55
is_deeply(
 
56
   $rows,
 
57
   [qw(index_alternatives index_usage indexes queries tables)],
 
58
   "Create tables"
 
59
);
 
60
 
 
61
$rows = $dbh->selectall_arrayref("select * from mk.tables order by db, tbl");
 
62
is_deeply(
 
63
   $rows,
 
64
   [
 
65
      [qw( sakila actor         0 )],
 
66
      [qw( sakila address       0 )],
 
67
   ],
 
68
   "Populate tables table (filtered)"
 
69
);
 
70
 
 
71
 
 
72
$rows = $dbh->selectall_arrayref("select * from mk.indexes order by db, tbl");
 
73
is_deeply(
 
74
   $rows,
 
75
   [
 
76
      [qw(sakila  actor   idx_actor_last_name 0)],
 
77
      [qw(sakila  actor   PRIMARY             0)],
 
78
      [qw(sakila  address idx_fk_city_id      0)],
 
79
      [qw(sakila  address PRIMARY             0)],
 
80
   ],
 
81
   "Populate indexes table (filtered)"
 
82
);
 
83
 
 
84
$rows = $dbh->selectall_arrayref("select * from mk.queries");
 
85
is_deeply(
 
86
   $rows,
 
87
   [],
 
88
   "No queries yet"
 
89
);
 
90
 
 
91
$rows = $dbh->selectall_arrayref("select * from mk.index_usage");
 
92
is_deeply(
 
93
   $rows,
 
94
   [],
 
95
   "No index usage counts yet"
 
96
);
 
97
 
 
98
$rows = $dbh->selectall_arrayref("select * from mk.index_alternatives");
 
99
is_deeply(
 
100
   $rows,
 
101
   [],
 
102
   "No index alternatives yet"
 
103
);
 
104
 
 
105
# Now for the real test.
 
106
mk_index_usage::main(@args, "$trunk/t/pt-index-usage/samples/slow007.txt",
 
107
   qw(--empty-save-results --no-report), '-t', 'sakila.actor,sakila.address');
 
108
 
 
109
$rows = $dbh->selectall_arrayref("select * from mk.tables order by db, tbl");
 
110
is_deeply(
 
111
   $rows,
 
112
   [
 
113
      [qw( sakila actor         4 )],
 
114
      [qw( sakila address       0 )],
 
115
   ],
 
116
   "Table access counts"
 
117
);
 
118
 
 
119
# EXPLAIN results differ a little between 5.0 and 5.1.  5.1 is smarter.
 
120
my $res = $sandbox_version ge '5.1' ?
 
121
   # v5.1 and newer
 
122
   [
 
123
      [qw(sakila  actor   idx_actor_last_name 1)],
 
124
      [qw(sakila  actor   PRIMARY             3)],
 
125
      [qw(sakila  address idx_fk_city_id      0)],
 
126
      [qw(sakila  address PRIMARY             0)],
 
127
   ]
 
128
   : # v5.0 and older
 
129
   [
 
130
      [qw(sakila  actor   idx_actor_last_name 2)],
 
131
      [qw(sakila  actor   PRIMARY             2)],
 
132
      [qw(sakila  address idx_fk_city_id      0)],
 
133
      [qw(sakila  address PRIMARY             0)],
 
134
   ];
 
135
 
 
136
$rows = $dbh->selectall_arrayref("select * from mk.indexes order by db, tbl");
 
137
is_deeply(
 
138
   $rows,
 
139
   $res,
 
140
   "Index usage counts"
 
141
);
 
142
 
 
143
$rows = $dbh->selectall_arrayref("select * from mk.queries order by query_id");
 
144
is_deeply(
 
145
   $rows,
 
146
   [
 
147
      [  4950186562421969363,
 
148
         "select * from sakila.actor where last_name like ?",
 
149
         "select * from sakila.actor where last_name like 'A%'",
 
150
      ],
 
151
      [  10334408417593890092,
 
152
         "select * from sakila.actor where last_name like ? order by actor_id",
 
153
         "select * from sakila.actor where last_name like 'A%' order by actor_id",
 
154
      ],
 
155
      [  10891801448710051322,
 
156
         "select * from sakila.actor where actor_id>?",
 
157
         "select * from sakila.actor where actor_id>10",
 
158
      ],
 
159
   ],
 
160
   "Queries added"
 
161
);
 
162
 
 
163
$rows = $dbh->selectall_arrayref("select query_id, db, tbl, idx, sample, cnt from index_usage iu left join queries q using (query_id) order by db, tbl, idx");
 
164
$res = $sandbox_version ge '5.1' ?
 
165
   # v5.1 and newer
 
166
   [
 
167
      [
 
168
         4950186562421969363,
 
169
         qw(sakila  actor  idx_actor_last_name),
 
170
         "select * from sakila.actor where last_name like 'A%'",
 
171
         1,
 
172
      ], 
 
173
      [
 
174
         10891801448710051322,
 
175
         qw(sakila  actor  PRIMARY),
 
176
         "select * from sakila.actor where actor_id>10",
 
177
         2,
 
178
      ],
 
179
      [
 
180
         10334408417593890092,
 
181
         qw(sakila  actor  PRIMARY),
 
182
         "select * from sakila.actor where last_name like 'A%' order by actor_id",
 
183
         1,
 
184
      ],
 
185
   ]
 
186
   :
 
187
   # v5.0 and older
 
188
   [
 
189
      [
 
190
         4950186562421969363,
 
191
         qw(sakila  actor  idx_actor_last_name),
 
192
         "select * from sakila.actor where last_name like 'A%'",
 
193
         1,
 
194
      ], 
 
195
      [
 
196
         10334408417593890092,
 
197
         qw(sakila  actor  idx_actor_last_name),
 
198
         "select * from sakila.actor where last_name like 'A%' order by actor_id",
 
199
         1,
 
200
      ],
 
201
      [
 
202
         10891801448710051322,
 
203
         qw(sakila  actor  PRIMARY),
 
204
         "select * from sakila.actor where actor_id>10",
 
205
         2,
 
206
      ],
 
207
   ];
 
208
is_deeply(
 
209
   $rows,
 
210
   $res,
 
211
   "Index usage",
 
212
);
 
213
 
 
214
$rows = $dbh->selectall_arrayref("select db,tbl,idx,alt_idx,sample from index_alternatives a left join queries q using (query_id)");
 
215
$res = $sandbox_version ge '5.1' ?
 
216
   [[qw(sakila actor PRIMARY idx_actor_last_name),
 
217
    "select * from sakila.actor where last_name like 'A%' order by actor_id"]]
 
218
   : [];
 
219
is_deeply(
 
220
   $rows,
 
221
   $res,
 
222
   "Index alternatives"
 
223
);
 
224
 
 
225
# #############################################################################
 
226
# Run again to check that cnt vals are properly updated.
 
227
# #############################################################################
 
228
mk_index_usage::main(@args, "$trunk/t/pt-index-usage/samples/slow007.txt",
 
229
   qw(--no-report), '-t', 'sakila.actor,sakila.address');
 
230
 
 
231
$rows = $dbh->selectall_arrayref("select * from mk.tables order by db, tbl");
 
232
is_deeply(
 
233
   $rows,
 
234
   [
 
235
      [qw( sakila actor         8 )],
 
236
      [qw( sakila address       0 )],
 
237
   ],
 
238
   "Updated table access counts"
 
239
);
 
240
 
 
241
# EXPLAIN results differ a little between 5.0 and 5.1.  5.1 is smarter.
 
242
$res = $sandbox_version ge '5.1' ?
 
243
   # v5.1 and newer
 
244
   [
 
245
      [qw(sakila  actor   idx_actor_last_name 2)],
 
246
      [qw(sakila  actor   PRIMARY             6)],
 
247
      [qw(sakila  address idx_fk_city_id      0)],
 
248
      [qw(sakila  address PRIMARY             0)],
 
249
   ]
 
250
   : # v5.0 and older
 
251
   [
 
252
      [qw(sakila  actor   idx_actor_last_name 4)],
 
253
      [qw(sakila  actor   PRIMARY             4)],
 
254
      [qw(sakila  address idx_fk_city_id      0)],
 
255
      [qw(sakila  address PRIMARY             0)],
 
256
   ];
 
257
 
 
258
$rows = $dbh->selectall_arrayref("select * from mk.indexes order by db, tbl");
 
259
is_deeply(
 
260
   $rows,
 
261
   $res,
 
262
   "Updated index usage counts"
 
263
);
 
264
 
 
265
$rows = $dbh->selectall_arrayref("select * from mk.queries order by query_id");
 
266
is_deeply(
 
267
   $rows,
 
268
   [
 
269
      [  4950186562421969363,
 
270
         "select * from sakila.actor where last_name like ?",
 
271
         "select * from sakila.actor where last_name like 'A%'",
 
272
      ],
 
273
      [  10334408417593890092,
 
274
         "select * from sakila.actor where last_name like ? order by actor_id",
 
275
         "select * from sakila.actor where last_name like 'A%' order by actor_id",
 
276
      ],
 
277
      [  10891801448710051322,
 
278
         "select * from sakila.actor where actor_id>?",
 
279
         "select * from sakila.actor where actor_id>10",
 
280
      ],
 
281
   ],
 
282
   "Same queries added"
 
283
);
 
284
 
 
285
$rows = $dbh->selectall_arrayref("select query_id, db, tbl, idx, sample, cnt from index_usage iu left join queries q using (query_id) order by db, tbl, idx");
 
286
$res = $sandbox_version ge '5.1' ?
 
287
   # v5.1 and newer
 
288
   [
 
289
      [
 
290
         4950186562421969363,
 
291
         qw(sakila  actor  idx_actor_last_name),
 
292
         "select * from sakila.actor where last_name like 'A%'",
 
293
         2,
 
294
      ], 
 
295
      [
 
296
         10891801448710051322,
 
297
         qw(sakila  actor  PRIMARY),
 
298
         "select * from sakila.actor where actor_id>10",
 
299
         4,
 
300
      ],
 
301
      [
 
302
         10334408417593890092,
 
303
         qw(sakila  actor  PRIMARY),
 
304
         "select * from sakila.actor where last_name like 'A%' order by actor_id",
 
305
         2,
 
306
      ],
 
307
   ]
 
308
   :
 
309
   # v5.0 and older
 
310
   [
 
311
      [
 
312
         4950186562421969363,
 
313
         qw(sakila  actor  idx_actor_last_name),
 
314
         "select * from sakila.actor where last_name like 'A%'",
 
315
         2,
 
316
      ], 
 
317
      [
 
318
         10334408417593890092,
 
319
         qw(sakila  actor  idx_actor_last_name),
 
320
         "select * from sakila.actor where last_name like 'A%' order by actor_id",
 
321
         2,
 
322
      ],
 
323
      [
 
324
         10891801448710051322,
 
325
         qw(sakila  actor  PRIMARY),
 
326
         "select * from sakila.actor where actor_id>10",
 
327
         4,
 
328
      ],
 
329
   ];
 
330
is_deeply(
 
331
   $rows,
 
332
   $res,
 
333
   "Same index usage",
 
334
);
 
335
 
 
336
$rows = $dbh->selectall_arrayref("select db,tbl,idx,alt_idx,sample from index_alternatives a left join queries q using (query_id)");
 
337
$res = $sandbox_version ge '5.1' ?
 
338
   [[qw(sakila actor PRIMARY idx_actor_last_name),
 
339
    "select * from sakila.actor where last_name like 'A%' order by actor_id"]]
 
340
   : [];
 
341
is_deeply(
 
342
   $rows,
 
343
   $res,
 
344
   "Same index alternatives"
 
345
);
 
346
 
 
347
 
 
348
# #############################################################################
 
349
# Issue 1184: Make mk-index-usage create views for canned queries
 
350
# #############################################################################
 
351
SKIP: {
 
352
   skip "MySQL sandbox version < 5.0", 1 unless $sandbox_version ge '5.0';     
 
353
}
 
354
 
 
355
# #############################################################################
 
356
# Done.
 
357
# #############################################################################
 
358
$sb->wipe_clean($dbh);
 
359
exit;