~percona-toolkit-dev/percona-toolkit/fix-pt-osc-drop-bug-1188002

« back to all changes in this revision

Viewing changes to docs/user/pt-query-advisor.rst

  • Committer: Daniel Nichter
  • Date: 2011-07-14 19:08:47 UTC
  • Revision ID: daniel@percona.com-20110714190847-lggalkuvdrh7c4jp
Add standard pkg files (COPYING, README, etc.), percona-toolkit.pod, and user docs.  Remove dev/docs/html.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
################
 
3
pt-query-advisor
 
4
################
 
5
 
 
6
.. highlight:: perl
 
7
 
 
8
 
 
9
****
 
10
NAME
 
11
****
 
12
 
 
13
 
 
14
pt-query-advisor - Analyze queries and advise on possible problems.
 
15
 
 
16
 
 
17
********
 
18
SYNOPSIS
 
19
********
 
20
 
 
21
 
 
22
Usage: pt-query-advisor [OPTION...] [FILE]
 
23
 
 
24
pt-query-advisor analyzes queries and advises on possible problems.
 
25
Queries are given either by specifying slowlog files, --query, or --review.
 
26
 
 
27
 
 
28
.. code-block:: perl
 
29
 
 
30
    # Analyzer all queries in the given slowlog
 
31
    pt-query-advisor /path/to/slow-query.log
 
32
 
 
33
    # Get queries from tcpdump using pt-query-digest
 
34
    pt-query-digest --type tcpdump.txt --print --no-report | pt-query-advisor
 
35
 
 
36
    # Get queries from a general log
 
37
    pt-query-advisor --type genlog mysql.log
 
38
 
 
39
 
 
40
 
 
41
*****
 
42
RISKS
 
43
*****
 
44
 
 
45
 
 
46
The following section is included to inform users about the potential risks,
 
47
whether known or unknown, of using this tool.  The two main categories of risks
 
48
are those created by the nature of the tool (e.g. read-only tools vs. read-write
 
49
tools) and those created by bugs.
 
50
 
 
51
pt-query-advisor simply reads queries and examines them, and is thus
 
52
very low risk.
 
53
 
 
54
At the time of this release there is a bug that may cause an infinite (or
 
55
very long) loop when parsing very large queries.
 
56
 
 
57
The authoritative source for updated information is always the online issue
 
58
tracking system.  Issues that affect this tool will be marked as such.  You can
 
59
see a list of such issues at the following URL:
 
60
`http://www.percona.com/bugs/pt-query-advisor <http://www.percona.com/bugs/pt-query-advisor>`_.
 
61
 
 
62
See also "BUGS" for more information on filing bugs and getting help.
 
63
 
 
64
 
 
65
***********
 
66
DESCRIPTION
 
67
***********
 
68
 
 
69
 
 
70
pt-query-advisor examines queries and applies rules to them, trying to
 
71
find queries that look bad according to the rules.  It reports on
 
72
queries that match the rules, so you can find bad practices or hidden
 
73
problems in your SQL.  By default, it accepts a MySQL slow query log
 
74
as input.
 
75
 
 
76
 
 
77
*****
 
78
RULES
 
79
*****
 
80
 
 
81
 
 
82
These are the rules that pt-query-advisor will apply to the queries it
 
83
examines.  Each rule has three bits of information: an ID, a severity
 
84
and a description.
 
85
 
 
86
The rule's ID is its identifier.  We use a seven-character ID, and the
 
87
naming convention is three characters, a period, and a three-digit
 
88
number.  The first three characters are sort of an abbreviation of the
 
89
general class of the rule.  For example, ALI.001 is some rule related
 
90
to how the query uses aliases.
 
91
 
 
92
The rule's severity is an indication of how important it is that this
 
93
rule matched a query.  We use NOTE, WARN, and CRIT to denote these
 
94
levels.
 
95
 
 
96
The rule's description is a textual, human-readable explanation of
 
97
what it means when a query matches this rule.  Depending on the
 
98
verbosity of the report you generate, you will see more of the text in
 
99
the description.  By default, you'll see only the first sentence,
 
100
which is sort of a terse synopsis of the rule's meaning.  At a higher
 
101
verbosity, you'll see subsequent sentences.
 
102
 
 
103
 
 
104
ALI.001
 
105
 
 
106
 severity: note
 
107
 
 
108
 Aliasing without the AS keyword.  Explicitly using the AS keyword in
 
109
 column or table aliases, such as "tbl AS alias," is more readable
 
110
 than implicit aliases such as "tbl alias".
 
111
 
 
112
 
 
113
 
 
114
ALI.002
 
115
 
 
116
 severity: warn
 
117
 
 
118
 Aliasing the '\*' wildcard.  Aliasing a column wildcard, such as
 
119
 "SELECT tbl.\* col1, col2" probably indicates a bug in your SQL.
 
120
 You probably meant for the query to retrieve col1, but instead it
 
121
 renames the last column in the \*-wildcarded list.
 
122
 
 
123
 
 
124
 
 
125
ALI.003
 
126
 
 
127
 severity: note
 
128
 
 
129
 Aliasing without renaming.  The table or column's alias is the same as
 
130
 its real name, and the alias just makes the query harder to read.
 
131
 
 
132
 
 
133
 
 
134
ARG.001
 
135
 
 
136
 severity: warn
 
137
 
 
138
 Argument with leading wildcard.  An argument has a leading
 
139
 wildcard character, such as "%foo".  The predicate with this argument
 
140
 is not sargable and cannot use an index if one exists.
 
141
 
 
142
 
 
143
 
 
144
ARG.002
 
145
 
 
146
 severity: note
 
147
 
 
148
 LIKE without a wildcard.  A LIKE pattern that does not include a
 
149
 wildcard is potentially a bug in the SQL.
 
150
 
 
151
 
 
152
 
 
153
CLA.001
 
154
 
 
155
 severity: warn
 
156
 
 
157
 SELECT without WHERE.  The SELECT statement has no WHERE clause.
 
158
 
 
159
 
 
160
 
 
161
CLA.002
 
162
 
 
163
 severity: note
 
164
 
 
165
 ORDER BY RAND().  ORDER BY RAND() is a very inefficient way to
 
166
 retrieve a random row from the results.
 
167
 
 
168
 
 
169
 
 
170
CLA.003
 
171
 
 
172
 severity: note
 
173
 
 
174
 LIMIT with OFFSET.  Paginating a result set with LIMIT and OFFSET is
 
175
 O(n^2) complexity, and will cause performance problems as the data
 
176
 grows larger.
 
177
 
 
178
 
 
179
 
 
180
CLA.004
 
181
 
 
182
 severity: note
 
183
 
 
184
 Ordinal in the GROUP BY clause.  Using a number in the GROUP BY clause,
 
185
 instead of an expression or column name, can cause problems if the
 
186
 query is changed.
 
187
 
 
188
 
 
189
 
 
190
CLA.005
 
191
 
 
192
 severity: warn
 
193
 
 
194
 ORDER BY constant column.
 
195
 
 
196
 
 
197
 
 
198
CLA.006
 
199
 
 
200
 severity: warn
 
201
 
 
202
 GROUP BY or ORDER BY different tables will force a temp table and filesort.
 
203
 
 
204
 
 
205
 
 
206
CLA.007
 
207
 
 
208
 severity: warn
 
209
 
 
210
 ORDER BY different directions prevents index from being used. All tables
 
211
 in the ORDER BY clause must be either ASC or DESC, else MySQL cannot use
 
212
 an index.
 
213
 
 
214
 
 
215
 
 
216
COL.001
 
217
 
 
218
 severity: note
 
219
 
 
220
 SELECT \*.  Selecting all columns with the \* wildcard will cause the
 
221
 query's meaning and behavior to change if the table's schema
 
222
 changes, and might cause the query to retrieve too much data.
 
223
 
 
224
 
 
225
 
 
226
COL.002
 
227
 
 
228
 severity: note
 
229
 
 
230
 Blind INSERT.  The INSERT or REPLACE query doesn't specify the
 
231
 columns explicitly, so the query's behavior will change if the
 
232
 table's schema changes; use "INSERT INTO tbl(col1, col2) VALUES..."
 
233
 instead.
 
234
 
 
235
 
 
236
 
 
237
LIT.001
 
238
 
 
239
 severity: warn
 
240
 
 
241
 Storing an IP address as characters.  The string literal looks like
 
242
 an IP address, but is not an argument to INET_ATON(), indicating that
 
243
 the data is stored as characters instead of as integers.  It is
 
244
 more efficient to store IP addresses as integers.
 
245
 
 
246
 
 
247
 
 
248
LIT.002
 
249
 
 
250
 severity: warn
 
251
 
 
252
 Unquoted date/time literal.  A query such as "WHERE col<2010-02-12"
 
253
 is valid SQL but is probably a bug; the literal should be quoted.
 
254
 
 
255
 
 
256
 
 
257
KWR.001
 
258
 
 
259
 severity: note
 
260
 
 
261
 SQL_CALC_FOUND_ROWS is inefficient.  SQL_CALC_FOUND_ROWS can cause
 
262
 performance problems because it does not scale well; use
 
263
 alternative strategies to build functionality such as paginated
 
264
 result screens.
 
265
 
 
266
 
 
267
 
 
268
JOI.001
 
269
 
 
270
 severity: crit
 
271
 
 
272
 Mixing comma and ANSI joins.  Mixing comma joins and ANSI joins
 
273
 is confusing to humans, and the behavior differs between some
 
274
 MySQL versions.
 
275
 
 
276
 
 
277
 
 
278
JOI.002
 
279
 
 
280
 severity: crit
 
281
 
 
282
 A table is joined twice.  The same table appears at least twice in the
 
283
 FROM clause.
 
284
 
 
285
 
 
286
 
 
287
JOI.003
 
288
 
 
289
 severity: warn
 
290
 
 
291
 Reference to outer table column in WHERE clause prevents OUTER JOIN,
 
292
 implicitly converts to INNER JOIN.
 
293
 
 
294
 
 
295
 
 
296
JOI.004
 
297
 
 
298
 severity: warn
 
299
 
 
300
 Exclusion join uses wrong column in WHERE.  The exclusion join (LEFT
 
301
 OUTER JOIN with a WHERE clause that is satisfied only if there is no row in
 
302
 the right-hand table) seems to use the wrong column in the WHERE clause.  A
 
303
 query such as "... FROM l LEFT OUTER JOIN r ON l.l=r.r WHERE r.z IS NULL"
 
304
 probably ought to list r.r in the WHERE IS NULL clause.
 
305
 
 
306
 
 
307
 
 
308
RES.001
 
309
 
 
310
 severity: warn
 
311
 
 
312
 Non-deterministic GROUP BY.  The SQL retrieves columns that are
 
313
 neither in an aggregate function nor the GROUP BY expression, so
 
314
 these values will be non-deterministic in the result.
 
315
 
 
316
 
 
317
 
 
318
RES.002
 
319
 
 
320
 severity: warn
 
321
 
 
322
 LIMIT without ORDER BY.  LIMIT without ORDER BY causes
 
323
 non-deterministic results, depending on the query execution plan.
 
324
 
 
325
 
 
326
 
 
327
STA.001
 
328
 
 
329
 severity: note
 
330
 
 
331
 != is non-standard.  Use the <> operator to test for inequality.
 
332
 
 
333
 
 
334
 
 
335
SUB.001
 
336
 
 
337
 severity: crit
 
338
 
 
339
 IN() and NOT IN() subqueries are poorly optimized.  MySQL executes the subquery
 
340
 as a dependent subquery for each row in the outer query.  This is a frequent
 
341
 cause of serious performance problems.  This might change version 6.0 of MySQL,
 
342
 but for versions 5.1 and older, the query should be rewritten as a JOIN or a
 
343
 LEFT OUTER JOIN, respectively.
 
344
 
 
345
 
 
346
 
 
347
 
 
348
*******
 
349
OPTIONS
 
350
*******
 
351
 
 
352
 
 
353
"--query" and "--review" are mutually exclusive.
 
354
 
 
355
This tool accepts additional command-line arguments.  Refer to the
 
356
"SYNOPSIS" and usage information for details.
 
357
 
 
358
 
 
359
--ask-pass
 
360
 
 
361
 Prompt for a password when connecting to MySQL.
 
362
 
 
363
 
 
364
 
 
365
--charset
 
366
 
 
367
 short form: -A; type: string
 
368
 
 
369
 Default character set.  If the value is utf8, sets Perl's binmode on
 
370
 STDOUT to utf8, passes the mysql_enable_utf8 option to DBD::mysql, and
 
371
 runs SET NAMES UTF8 after connecting to MySQL.  Any other value sets
 
372
 binmode on STDOUT without the utf8 layer, and runs SET NAMES after
 
373
 connecting to MySQL.
 
374
 
 
375
 
 
376
 
 
377
--config
 
378
 
 
379
 type: Array
 
380
 
 
381
 Read this comma-separated list of config files; if specified, this must be the
 
382
 first option on the command line.
 
383
 
 
384
 
 
385
 
 
386
--[no]continue-on-error
 
387
 
 
388
 default: yes
 
389
 
 
390
 Continue working even if there is an error.
 
391
 
 
392
 
 
393
 
 
394
--daemonize
 
395
 
 
396
 Fork to the background and detach from the shell.  POSIX
 
397
 operating systems only.
 
398
 
 
399
 
 
400
 
 
401
--database
 
402
 
 
403
 short form: -D; type: string
 
404
 
 
405
 Connect to this database.  This is also used as the default database
 
406
 for "--[no]show-create-table" if a query does not use database-qualified
 
407
 tables.
 
408
 
 
409
 
 
410
 
 
411
--defaults-file
 
412
 
 
413
 short form: -F; type: string
 
414
 
 
415
 Only read mysql options from the given file.  You must give an absolute
 
416
 pathname.
 
417
 
 
418
 
 
419
 
 
420
--group-by
 
421
 
 
422
 type: string; default: rule_id
 
423
 
 
424
 Group items in the report by this attribute.  Possible attributes are:
 
425
 
 
426
 
 
427
 .. code-block:: perl
 
428
 
 
429
     ATTRIBUTE GROUPS
 
430
     ========= ==========================================================
 
431
     rule_id   Items matching the same rule ID
 
432
     query_id  Queries with the same ID (the same fingerprint)
 
433
     none      No grouping, report each query and its advice individually
 
434
 
 
435
 
 
436
 
 
437
 
 
438
--help
 
439
 
 
440
 Show help and exit.
 
441
 
 
442
 
 
443
 
 
444
--host
 
445
 
 
446
 short form: -h; type: string
 
447
 
 
448
 Connect to host.
 
449
 
 
450
 
 
451
 
 
452
--ignore-rules
 
453
 
 
454
 type: hash
 
455
 
 
456
 Ignore these rule IDs.
 
457
 
 
458
 Specify a comma-separated list of rule IDs (e.g. LIT.001,RES.002,etc.)
 
459
 to ignore. Currently, the rule IDs are case-sensitive and must be uppercase.
 
460
 
 
461
 
 
462
 
 
463
--password
 
464
 
 
465
 short form: -p; type: string
 
466
 
 
467
 Password to use when connecting.
 
468
 
 
469
 
 
470
 
 
471
--pid
 
472
 
 
473
 type: string
 
474
 
 
475
 Create the given PID file when daemonized.  The file contains the process
 
476
 ID of the daemonized instance.  The PID file is removed when the
 
477
 daemonized instance exits.  The program checks for the existence of the
 
478
 PID file when starting; if it exists and the process with the matching PID
 
479
 exists, the program exits.
 
480
 
 
481
 
 
482
 
 
483
--port
 
484
 
 
485
 short form: -P; type: int
 
486
 
 
487
 Port number to use for connection.
 
488
 
 
489
 
 
490
 
 
491
--print-all
 
492
 
 
493
 Print all queries, even those that do not match any rules.  With
 
494
 "--group-by" \ ``none``\ , non-matching queries are printed in the main report
 
495
 and profile.  For other "--group-by" values, non-matching queries are only
 
496
 printed in the profile.  Non-matching queries have zeros for \ ``NOTE``\ , \ ``WARN``\ 
 
497
 and \ ``CRIT``\  in the profile.
 
498
 
 
499
 
 
500
 
 
501
--query
 
502
 
 
503
 type: string
 
504
 
 
505
 Analyze this single query and ignore files and STDIN.  This option
 
506
 allows you to supply a single query on the command line.  Any files
 
507
 also specified on the command line are ignored.
 
508
 
 
509
 
 
510
 
 
511
--report-format
 
512
 
 
513
 type: string; default: compact
 
514
 
 
515
 Type of report format: full or compact.  In full mode, every query's
 
516
 report contains the description of the rules it matched, even if this
 
517
 information was previously displayed.  In compact mode, the repeated
 
518
 information is suppressed, and only the rule ID is displayed.
 
519
 
 
520
 
 
521
 
 
522
--review
 
523
 
 
524
 type: DSN
 
525
 
 
526
 Analyze queries from this pt-query-digest query review table.
 
527
 
 
528
 
 
529
 
 
530
--sample
 
531
 
 
532
 type: int; default: 1
 
533
 
 
534
 How many samples of the query to show.
 
535
 
 
536
 
 
537
 
 
538
--set-vars
 
539
 
 
540
 type: string; default: wait_timeout=10000
 
541
 
 
542
 Set these MySQL variables.  Immediately after connecting to MySQL, this string
 
543
 will be appended to SET and executed.
 
544
 
 
545
 
 
546
 
 
547
--[no]show-create-table
 
548
 
 
549
 default: yes
 
550
 
 
551
 Get \ ``SHOW CREATE TABLE``\  for each query's table.
 
552
 
 
553
 If host connection options are given (like "--host", "--port", etc.)
 
554
 then the tool will also get \ ``SHOW CREATE TABLE``\  for each query.  This
 
555
 information is needed for some rules like JOI.004.  If this option is
 
556
 disabled by specifying \ ``--no-show-create-table``\  then some rules may not
 
557
 be checked.
 
558
 
 
559
 
 
560
 
 
561
--socket
 
562
 
 
563
 short form: -S; type: string
 
564
 
 
565
 Socket file to use for connection.
 
566
 
 
567
 
 
568
 
 
569
--type
 
570
 
 
571
 type: Array
 
572
 
 
573
 The type of input to parse (default slowlog).  The permitted types are
 
574
 slowlog and genlog.
 
575
 
 
576
 
 
577
 
 
578
--user
 
579
 
 
580
 short form: -u; type: string
 
581
 
 
582
 User for login if not current user.
 
583
 
 
584
 
 
585
 
 
586
--verbose
 
587
 
 
588
 short form: -v; cumulative: yes; default: 1
 
589
 
 
590
 Increase verbosity of output.  At the default level of verbosity, the
 
591
 program prints only the first sentence of each rule's description.  At
 
592
 higher levels, the program prints more of the description.  See also
 
593
 "--report-format".
 
594
 
 
595
 
 
596
 
 
597
--version
 
598
 
 
599
 Show version and exit.
 
600
 
 
601
 
 
602
 
 
603
--where
 
604
 
 
605
 type: string
 
606
 
 
607
 Apply this WHERE clause to the SELECT query on the "--review" table.
 
608
 
 
609
 
 
610
 
 
611
 
 
612
***********
 
613
DSN OPTIONS
 
614
***********
 
615
 
 
616
 
 
617
These DSN options are used to create a DSN.  Each option is given like
 
618
\ ``option=value``\ .  The options are case-sensitive, so P and p are not the
 
619
same option.  There cannot be whitespace before or after the \ ``=``\  and
 
620
if the value contains whitespace it must be quoted.  DSN options are
 
621
comma-separated.  See the percona-toolkit manpage for full details.
 
622
 
 
623
 
 
624
\* A
 
625
 
 
626
 dsn: charset; copy: yes
 
627
 
 
628
 Default character set.
 
629
 
 
630
 
 
631
 
 
632
\* D
 
633
 
 
634
 dsn: database; copy: yes
 
635
 
 
636
 Database that contains the query review table.
 
637
 
 
638
 
 
639
 
 
640
\* F
 
641
 
 
642
 dsn: mysql_read_default_file; copy: yes
 
643
 
 
644
 Only read default options from the given file
 
645
 
 
646
 
 
647
 
 
648
\* h
 
649
 
 
650
 dsn: host; copy: yes
 
651
 
 
652
 Connect to host.
 
653
 
 
654
 
 
655
 
 
656
\* p
 
657
 
 
658
 dsn: password; copy: yes
 
659
 
 
660
 Password to use when connecting.
 
661
 
 
662
 
 
663
 
 
664
\* P
 
665
 
 
666
 dsn: port; copy: yes
 
667
 
 
668
 Port number to use for connection.
 
669
 
 
670
 
 
671
 
 
672
\* S
 
673
 
 
674
 dsn: mysql_socket; copy: yes
 
675
 
 
676
 Socket file to use for connection.
 
677
 
 
678
 
 
679
 
 
680
\* t
 
681
 
 
682
 Table to use as the query review table.
 
683
 
 
684
 
 
685
 
 
686
\* u
 
687
 
 
688
 dsn: user; copy: yes
 
689
 
 
690
 User for login if not current user.
 
691
 
 
692
 
 
693
 
 
694
 
 
695
***********
 
696
DOWNLOADING
 
697
***********
 
698
 
 
699
 
 
700
Visit `http://www.percona.com/software/ <http://www.percona.com/software/>`_ to download the latest release of
 
701
Percona Toolkit.  Or, to get the latest release from the command line:
 
702
 
 
703
 
 
704
.. code-block:: perl
 
705
 
 
706
    wget percona.com/latest/percona-toolkit/PKG
 
707
 
 
708
 
 
709
Replace \ ``PKG``\  with \ ``tar``\ , \ ``rpm``\ , or \ ``deb``\  to download the package in that
 
710
format.  You can also get individual tools from the latest release:
 
711
 
 
712
 
 
713
.. code-block:: perl
 
714
 
 
715
    wget percona.com/latest/percona-toolkit/TOOL
 
716
 
 
717
 
 
718
Replace \ ``TOOL``\  with the name of any tool.
 
719
 
 
720
 
 
721
***********
 
722
ENVIRONMENT
 
723
***********
 
724
 
 
725
 
 
726
The environment variable \ ``PTDEBUG``\  enables verbose debugging output to STDERR.
 
727
To enable debugging and capture all output to a file, run the tool like:
 
728
 
 
729
 
 
730
.. code-block:: perl
 
731
 
 
732
    PTDEBUG=1 pt-query-advisor ... > FILE 2>&1
 
733
 
 
734
 
 
735
Be careful: debugging output is voluminous and can generate several megabytes
 
736
of output.
 
737
 
 
738
 
 
739
*******************
 
740
SYSTEM REQUIREMENTS
 
741
*******************
 
742
 
 
743
 
 
744
You need Perl, DBI, DBD::mysql, and some core packages that ought to be
 
745
installed in any reasonably new version of Perl.
 
746
 
 
747
 
 
748
****
 
749
BUGS
 
750
****
 
751
 
 
752
 
 
753
For a list of known bugs, see `http://www.percona.com/bugs/pt-query-advisor <http://www.percona.com/bugs/pt-query-advisor>`_.
 
754
 
 
755
Please report bugs at `https://bugs.launchpad.net/percona-toolkit <https://bugs.launchpad.net/percona-toolkit>`_.
 
756
Include the following information in your bug report:
 
757
 
 
758
 
 
759
\* Complete command-line used to run the tool
 
760
 
 
761
 
 
762
 
 
763
\* Tool "--version"
 
764
 
 
765
 
 
766
 
 
767
\* MySQL version of all servers involved
 
768
 
 
769
 
 
770
 
 
771
\* Output from the tool including STDERR
 
772
 
 
773
 
 
774
 
 
775
\* Input files (log/dump/config files, etc.)
 
776
 
 
777
 
 
778
 
 
779
If possible, include debugging output by running the tool with \ ``PTDEBUG``\ ;
 
780
see "ENVIRONMENT".
 
781
 
 
782
 
 
783
*******
 
784
AUTHORS
 
785
*******
 
786
 
 
787
 
 
788
Baron Schwartz and Daniel Nichter
 
789
 
 
790
 
 
791
*********************
 
792
ABOUT PERCONA TOOLKIT
 
793
*********************
 
794
 
 
795
 
 
796
This tool is part of Percona Toolkit, a collection of advanced command-line
 
797
tools developed by Percona for MySQL support and consulting.  Percona Toolkit
 
798
was forked from two projects in June, 2011: Maatkit and Aspersa.  Those
 
799
projects were created by Baron Schwartz and developed primarily by him and
 
800
Daniel Nichter, both of whom are employed by Percona.  Visit
 
801
`http://www.percona.com/software/ <http://www.percona.com/software/>`_ for more software developed by Percona.
 
802
 
 
803
 
 
804
********************************
 
805
COPYRIGHT, LICENSE, AND WARRANTY
 
806
********************************
 
807
 
 
808
 
 
809
This program is copyright 2010-2011 Percona Inc.
 
810
Feedback and improvements are welcome.
 
811
 
 
812
THIS PROGRAM IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
 
813
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 
814
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
815
 
 
816
This program is free software; you can redistribute it and/or modify it under
 
817
the terms of the GNU General Public License as published by the Free Software
 
818
Foundation, version 2; OR the Perl Artistic License.  On UNIX and similar
 
819
systems, you can issue \`man perlgpl' or \`man perlartistic' to read these
 
820
licenses.
 
821
 
 
822
You should have received a copy of the GNU General Public License along with
 
823
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 
824
Place, Suite 330, Boston, MA  02111-1307  USA.
 
825
 
 
826
 
 
827
*******
 
828
VERSION
 
829
*******
 
830
 
 
831
 
 
832
Percona Toolkit v1.0.0 released 2011-08-01
 
833