http://blogold.chinaunix.net/u3/90603/showart_2039031.html
I’m observing the process of most awesome SHOW commands being abolished, destroyed and some weird information_schema tables are introduced instead.
Say, even though you can select configuration variables using @@syntax, you can’t do same for much more interesting to DBAs status variables in any more interesting logic.
Apparently instead of doing
SHOW STATUS LIKE "questions"
one has to do this now (I’m being dramatic here, above hasn’t been removed yet, but hasn’t been expanded for better usage either):
SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
WHERE VARIABLE_NAME="QUESTIONS"
Do note, those SQL standard followers will get caps-lock button swapped with space bar soon.
Of course, we, DBAs, know that one can simplify stuff by creating stored routines:
CREATE FUNCTION `gstatus`(v varchar(64)) returns varchar(1024)
return
( SELECT variable_value
FROM information_schema.global_status
where variable_name=v LIMIT 1
)
So we can do such simple things as:
mysql> select m.gstatus("questions");
+------------------------+
| m.gstatus("questions") |
+------------------------+
| 140 |
+------------------------+
1 row in set (0.00 sec)
Of course, this leads to solution of one of most common DBA problems, how to get decent status variable values per time:
CREATE PROCEDURE m.report(in timer float)
begin
DROP TEMPORARY TABLE IF EXISTS status_old;
CREATE TEMPORARY TABLE status_old
SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS;
SELECT SLEEP(timer) into @x;
SELECT
s.variable_name status,
(s.variable_value-o.variable_value)/timer value
FROM INFORMATION_SCHEMA.GLOBAL_STATUS s
JOIN status_old o USING (variable_name)
WHERE s.variable_value>0;
DROP TEMPORARY TABLE status_old;
end
So, the “show me changes-per-second for values in last 0.5s” would look like this:
ysql> call m.report(0.5) //
+-----------------------------------+---------+
| status | value |
+-----------------------------------+---------+
| ABORTED_CLIENTS | 0 |
| ABORTED_CONNECTS | 0 |
| BYTES_RECEIVED | 532662 |
| BYTES_SENT | 1140894 |
...
| QUERIES | 2884 |
| QUESTIONS | 2878 |
| SELECT_FULL_JOIN | 2 |
| SELECT_RANGE | 196 |
| SELECT_SCAN | 146 |
...
| THREADS_CACHED | 12 |
| THREADS_CONNECTED | -28 |
| THREADS_CREATED | 4 |
| THREADS_RUNNING | -2 |
| UPTIME | 2 |
| UPTIME_SINCE_FLUSH_STATUS | 2 |
+-----------------------------------+---------+
125 rows in set (0.53 sec)
Query OK, 0 rows affected, 1 warning (0.54 sec)
So, by spending five minutes on writing very simple INFORMATION_SCHEMA procedure we can resolve one of usual nightmares in MySQL DBA environments.
原文位址http://mituzas.lt/2009/07/29/dbas-of-all-countries-unite/