I've researched this topic a little bit and available information indicates that MyISAM tables should not crash on their own from a simple server restart. Usually the following causes are put forth:
- hardware bug
- server terminated abruptly (e.g. SIGKILL)
- system-level issues, such as OOM scenarios, out-of-disk space, or system panics
However, on my environment, a "normal" mysqld shutdown and restart operation has been seen to occasionally cause tables to crash. No other anomalous condition or system-level error was present. The tables are almost always the ones that are hit with the most amount of queries. The server is practically executing queries against these tables continuously, and not all of them are DML queries. The tables are frequently altered, optimized, and so on. However, in all cases, the server is shut down by issuing a SIGTERM, and waiting until it exits on its own, with an exit code of 0. It is never abruptly terminated.
The tables are subsequently successfully repaired with a "REPAIR TABLE" query, but this doesn't tell me why the problem happened to begin with.
Changing the architecture to avoid this problem is infeasible, so I need to know why it happens. Is MyISAM inherently subject to corruption upon server shutdown?