InnoDB Multi-Versioning •The  InnoDB  doublewrite buffer. See Section 15.6.4, “Doublewrite Buffer” . •The  innodb_flush_log_at_trx_commit  variable. •The  sync_binlog  variable. •The  innodb_file_per_table  variable. •The write buffer in a storage device, such as a disk drive, SSD, or RAID array. •A battery-backed cache in a storage device. •The operating system used to run MySQL, in particular its support for the  fsync()  system call. •An uninterruptible power supply (UPS) protecting the electrical power to all computer servers and storage devices that run MySQL servers and store MySQL data. •Your backup strategy, such as frequency and types of backups, and backup retention periods. •For distributed or hosted data applications, the particular characteristics of the data centers where the hardware for the MySQL servers is located, and network connections between the data centers. •A 6-byte  DB_TRX_ID  field indicates the transaction identifier for the last transaction that inserted or updated the row. Also, a deletion is treated internally as an update where a special bit in the row is set to mark it as deleted. •A 7-byte  DB_ROLL_PTR  field called the roll pointer. The roll pointer points to an undo log record written to the rollback segment. If the row was updated, the undo log record contains the information necessary to rebuild the content of the row before it was updated. •A 6-byte  DB_ROW_ID  field contains a row ID that increases monotonically as new rows are inserted. If InnoDB  generates a clustered index automatically, the index contains row ID values. Otherwise, the DB_ROW_ID  column does not appear in any index. 3004 It is recommend that you commit transactions regularly, including transactions that issue only consistent reads. Otherwise,  InnoDB  cannot discard data from the update undo logs, and the rollback segment may grow too big, filling up the undo tablespace in which it resides. For information about managing undo tablespaces, see Section 15.6.3.4, “Undo Tablespaces” . Undo logs in the rollback segment are divided into insert and update undo logs. Insert undo logs are needed only in transaction rollback and can be discarded as soon as the transaction commits. Update undo logs are used also in consistent reads, but they can be discarded only after there is no transaction present for which  InnoDB  has assigned a snapshot that in a consistent read could require the information in the update undo log to build an earlier version of a database row. For additional information about undo logs, see Section 15.6.6, “Undo Logs” . Internally,  InnoDB  adds three fields to each row stored in the database: InnoDB  is a multi-version storage engine. It keeps information about old versions of changed rows to support transactional features such as concurrency and rollback. This information is stored in undo tablespaces in a data structure called a rollback segment. See Section 15.6.3.4, “Undo Tablespaces” . InnoDB  uses the information in the rollback segment to perform the undo operations needed in a transaction rollback. It also uses the information to build earlier versions of a row for a consistent read. See Section 15.7.2.3, “Consistent Nonlocking Reads” . 15.3 InnoDB Multi-Versioning