So yesterday we had a table that has an auto_increment PK for a smallint that reached its maximum. We had to alter the table on an emergency basis, which is definitely not how we like to roll.
Is there an easy way to report on how close each auto_increment field that we use is to its maximum? The best way I can think of is to do a SHOW CREATE TABLE statement, parse out the size of the auto-incremented column, then compare that to the AUTO_INCREMENT value for the table.
On the other hand, given that the schema doesn’t change very often, should I store information about the columns’ maximum values and get the current AUTO_INCREMENT with SHOW TABLE STATUS?
Your question seems perfectly reasonable to me. You should be able to get the current auto-increment values for each table from information_schema. I don’t think the max values for the various int types are available as constants in MySQL, but Roland Bouman demonstrated a simple way to generate them in MySQL:
In SQL how do I get the maximum value for an integer?
If you put that data into a table, then you can write a single SQL query to get the current auto-increment status of all of your tables so you can see how close you are to running out of values.
Here’s a quick-and-dirty example to get you started: