Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL не актуализира information_schema, освен ако не стартирам ръчно ANALYZE TABLE `myTable`

В: Защо MySQL не актуализира автоматично information_schema и как мога да коригирам това поведение?

А: InnoDB съхранява стойността auto_increment в паметта и не я запазва на диска.

Поведение на заявките за метаданни (напр. SHOW TABLE STATUS ) се влияе от настройката на innodb_stats_on_metadata и innodb_stats_persistent променливи.

https://dev.mysql.com/doc /refman/8.0/en/innodb-parameters.html#sysvar_innodb_stats_on_metadata

Принудителното АНАЛИЗИРАНЕ всеки път, когато запитваме метаданни, може да доведе до източване на производителността.

Освен настройките на тези променливи или принудително събиране на статистически данни чрез ръчно изпълнение на ANALYZE TABLE , не мисля, че има "поправка" на проблема.

(Мисля, че най-вече защото не мисля, че това е проблем, който трябва да бъде отстранен.)

За да получите най-високата стойност на колона auto_increment в таблица, нормативният модел е:

 SELECT MAX(`ai_col`) FROM `myschema`.`mytable`

Това, което ме озадачава, е защо трябва да извлечем тази конкретна информация. За какво ще го използваме?

Разбира се, ние няма да използваме това в кода на приложението, за да определим стойност, която е присвоена на ред, който току-що вмъкнахме. Няма гаранция, че най-високата стойност не е от ред, който е бил вмъкнат от друга сесия. И имаме LAST_INSERT_ID() механизъм за извличане на стойността на ред, който току-що вмъкна от нашата сесия.

Ако отидем с ANALYZE TABLE за да обновите статистиката, все още има малко време между това и последващо SELECT ... друга сесия може да се вмъкне в друг INSERT така че стойността, която получаваме от събираните статистически данни, може да бъде „неактуална“ до момента, в който я извлечем.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да ограничим времето за изпълнение на sql

  2. Как да изчислим процента на растеж седмица през седмица в MySQL

  3. Инсталирайте MySQL на Ubuntu 14.04

  4. MySQL/PHP:Как да получите колони и свързани данни

  5. копирайте данни от база данни на mysql в друга база данни на mysql с java