How to stop MySQL creating temporary tables on disk?

How to stop MySQL creating temporary tables on disk?

MySQL creates temporary tables on disk. How do I stop it? We are running a site (Moodle) that the users currently find slow. I think I have tracked down the problem to MySQL creating temporary tables on disk. I watch the variable created_tmp_disk_tables in Mysql Workbench server administration and the number increases with roughly 50 tables/s.

What is the maximum size of a temporary table in MySQL?

If the space required to build a temporary table exceeds either tmp_table_size or max_heap_table_size, MySQL creates a disk-based table in the server’s tmpdir directory. The maximum size for in-memory temporary tables is defined by the tmp_table_size or max_heap_table_size value, whichever is smaller.

How to lower created TMP _ disk _ tables?

Set long_query_time = 1 and turn on the SlowLog, preferably to FILE. Wait a day, then use pt-query-digest on the slowlog to find the “worst” queries. If you can’t figure out how to improve them, ask us. RAM disk is a bad idea — it is better to give the extra RAM to other caches rather than trying to outsmart MySQL.

How big is the created TMP table size?

Created_tmp_disk_tables is nearly as large as Created_tmp_tables — This implies that either tmp_table_size is not big enough (which I doubt), or MEMORY cannot be used (which I suspect). Above 20% is a red flag in my analysis. Set long_query_time = 1 and turn on the SlowLog, preferably to FILE.

Why is TMP table in RAM in MySQL?

If the tmp table fits in min (tmp_table_size, max_heap_table_size), then the tmp table may be in RAM using Engine=MEMORY. If bigger than that, then the tmp table is Engine=MyISAM and is slower. There are other reasons for using MyISAM, most notably is selecting a TEXT field. More details.

When do I need A TMP table in RAM?

DISTINCT, GROUP BY, ORDER BY and UNION often require a tmp table. If the tmp table fits in min (tmp_table_size, max_heap_table_size), then the tmp table may be in RAM using Engine=MEMORY.

Can a temp table be written to ram?

Temp table creation will still happen, but it will be written to RAM rather than disk. reducing Disk I/O. I would suggest revisiting SUGGESTION #2 with a fast RAID-0 disk (32+ GB), configuring it as Drive T: (T for Temp). After installing such a disk, add this to my.ini:

How to check if a temporary table exists in MySQL?

If the temporary table exists, the @table_exists variable is set to 1, otherwise, it sets to 0. This statement calls the check_table_exists to check if the temporary table credits exists: