web-dev-qa-db-fra.com

ibdata1 devient exponentiellement lorsque INNODB_FILE_PER_TABLE est configuré

J'ai installé un cluster mysql avec Innodb (Innodb_File_Per_Table activé ultérieurement), mais depuis que je suis passée à innodb_file_per_table, le fichier ibdata1 grandit (2 Go par mois).

est mon my.cnf fichier est correct?

Pourquoi mon ibdata1 est si gros (22 Go)?

Comment je peux regarder ce qu'il y a dans l'ibdata1?

Configuration du serveur :

  • Debian 6 AMD64

  • mySQL-Client-5.1 5.1.61-0 + Squeeze1

mon fichier de configuration innodb :

#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#

innodb_data_home_dir            = /var/lib/mysql
innodb_data_file_path           = ibdata1:10M:autoextend
innodb_log_group_home_dir       = /var/lib/mysql
innodb_file_per_table
innodb_buffer_pool_size         = 5G
innodb_additional_mem_pool_size = 48M
innodb_log_files_in_group       = 3
innodb_log_file_size            = 512M
innodb_log_buffer_size          = 8M
innodb_flush_log_at_trx_commit  = 0
innodb_lock_wait_timeout        = 50
innodb_thread_concurrency       = 15 
innodb_flush_method             = O_DIRECT

Procédure :

1) Dump All DB's
2) Stop MySQL
3) Add "innodb_file_per_table"
4) Delete all ib* file
5) Start MySQL
6) Import All DB's

InnoDb Conf :

mysql> show variables like 'innodb%';
+-----------------------------------------+------------------------+
| Variable_name                           | Value                  |
+-----------------------------------------+------------------------+
| innodb_adaptive_hash_index              | ON                     |
| innodb_additional_mem_pool_size         | 50331648               |
| innodb_autoextend_increment             | 8                      |
| innodb_autoinc_lock_mode                | 1                      |
| innodb_buffer_pool_size                 | 25165824000            |
| innodb_checksums                        | ON                     |
| innodb_commit_concurrency               | 0                      |
| innodb_concurrency_tickets              | 500                    |
| innodb_data_file_path                   | ibdata1:10M:autoextend |
| innodb_data_home_dir                    | /var/lib/mysql         |
| innodb_doublewrite                      | ON                     |
| innodb_fast_shutdown                    | 1                      |
| innodb_file_io_threads                  | 4                      |
| innodb_file_per_table                   | ON                     |
| innodb_flush_log_at_trx_commit          | 0                      |
| innodb_flush_method                     | O_DIRECT               |
| innodb_force_recovery                   | 0                      |
| innodb_lock_wait_timeout                | 50                     |
| innodb_locks_unsafe_for_binlog          | OFF                    |
| innodb_log_buffer_size                  | 8388608                |
| innodb_log_file_size                    | 536870912              |
| innodb_log_files_in_group               | 3                      |
| innodb_log_group_home_dir               | /var/lib/mysql         |
| innodb_max_dirty_pages_pct              | 90                     |
| innodb_max_purge_lag                    | 0                      |
| innodb_mirrored_log_groups              | 1                      |
| innodb_open_files                       | 300                    |
| innodb_rollback_on_timeout              | OFF                    |
| innodb_stats_method                     | nulls_equal            |
| innodb_stats_on_metadata                | ON                     |
| innodb_support_xa                       | ON                     |
| innodb_sync_spin_loops                  | 20                     |
| innodb_table_locks                      | ON                     |
| innodb_thread_concurrency               | 15                     |
| innodb_thread_sleep_delay               | 10000                  |
| innodb_use_legacy_cardinality_algorithm | ON                     |
+-----------------------------------------+------------------------+
4
Furo83

ibdata1 peut toujours grandir malgré ((( innodb_file_per_table étant activé. Pourquoi ?

Question: Si des tables et des indices associatifs InnoDB sont écrits dans des fichiers d'espace de table individuels (extension de fichier .ibd), quelles informations doivent encore être écrites à ibdata1?

Réponse: Voici les catégories d'informations suivantes écrites sur la table de table de l'innoDB:

  • Dictionnaire de données
  • Double tampon d'écriture
    • Net de sécurité pour prévenir la corruption des données
    • Aide à contourner le système d'exploitation pour la mise en cache
  • Insérer un tampon (Rationalines Modifications des index secondaires)
  • Segments de restauration
  • Annuler les journaux
  • Cliquez ici pour voir une représentation picturale de ibdata1

J'en ai discuté avant:

ÉPILOGUE

Compte tenu de suffisamment de transactions, de segments de restauration et de journaux annulaires pour prendre en charge les lectures répétables peuvent faire grandir IBDATA1. Les insertions et les mises à jour des tables InnoDB avec des index secondaires peuvent s'accumuler dans le tampon d'insertion. Le tampon à double écriture fournit un deuxième niveau de redondance de données en cas de crash et de récupération ultérieure de l'accident sur MySQLD Startup. La seule chose qui ne peut jamais augmenter est le dictionnaire de données (sauf si vous avez des instructions DDL pour créer de nouvelles tables InnoDB).

7
RolandoMySQLDBA

Vérifiez le statut InnoDB pour les transactions à long terme car ils peuvent gonfler ibdata1 fichier. Si vous avez changé en Innodb_File_Per_Table après avoir fonctionné pendant un certain temps, sans que les tables existantes y écrivent toujours. INNODB_FILE_PER_TABLE continuera à écrire sur l'espace de la table global, sauf si vous 1. Dump and Recharge, 2. Non-OP Alter. De nouvelles tables créées après la modification de configuration auront leur propre espace de table.

1
eroomydna