MySQL Bug? «SHOW TABLE STATUS» сообщает о переменном количестве строк во время импорта - PullRequest
2 голосов
/ 03 февраля 2010

Я импортирую записи 4.1mil в автономную систему, чтобы провести некоторый анализ в подмножестве нашей базы данных. Поскольку я запускаю импорт, я пытаюсь проверить его выполнение с помощью:

SHOW TABLE STATUS LIKE 'MailIssueElement'

Что странно ... в разное время я вижу более высокие и более низкие значения для Rows. Я ожидал бы, что это только повысится. Вот пример вывода:

mysql> show table status like 'MailIssueElement' \G
*************************** 1. row ***************************
           Name: MailIssueElement
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 2818307
 Avg_row_length: 120
    Data_length: 338392232
Max_data_length: 281474976710655
   Index_length: 158029824
      Data_free: 0
 Auto_increment: 10248973
    Create_time: 2010-02-03 10:58:41
    Update_time: 2010-02-03 11:04:06
     Check_time: 2010-02-03 10:58:53
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.60 sec)

mysql> show table status like 'MailIssueElement' \G
*************************** 1. row ***************************
           Name: MailIssueElement
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 1870294
 Avg_row_length: 119
    Data_length: 223251912
Max_data_length: 281474976710655
   Index_length: 107688960
      Data_free: 0
 Auto_increment: 10248973
    Create_time: 2010-02-03 10:58:41
    Update_time: 2010-02-03 11:04:13
     Check_time: 2010-02-03 10:58:53
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.35 sec)

mysql> show table status like 'MailIssueElement' \G
*************************** 1. row ***************************
           Name: MailIssueElement
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 3074205
 Avg_row_length: 120
    Data_length: 369507112
Max_data_length: 281474976710655
   Index_length: 171537408
      Data_free: 0
 Auto_increment: 10248973
    Create_time: 2010-02-03 10:58:41
    Update_time: 2010-02-03 11:04:36
     Check_time: 2010-02-03 10:58:53
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.01 sec)

mysql> show table status like 'MailIssueElement' \G
*************************** 1. row ***************************
           Name: MailIssueElement
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 1870294
 Avg_row_length: 119
    Data_length: 223251912
Max_data_length: 281474976710655
   Index_length: 107688960
      Data_free: 0
 Auto_increment: 10248973
    Create_time: 2010-02-03 10:58:41
    Update_time: 2010-02-03 11:04:40
     Check_time: 2010-02-03 10:58:53
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Есть ли объяснение этому поведению? Есть ли лучший способ проверить прогресс моего импорта?

Запуск следующей версии: Версия сервера: 5.0.32-Debian_7etch11-log Распределение Debian etch


EDIT:

Вот DDL. Это таблица MyISAM:

mysql> show create table MailIssueElement \G
*************************** 1. row ***************************
       Table: MailIssueElement
Create Table: CREATE TABLE `MailIssueElement` (
  `Id` int(11) NOT NULL auto_increment,
  `IssueId` int(11) NOT NULL default '0',
  `Date` datetime NOT NULL default '0000-00-00 00:00:00',
  `Direction` enum('inbound','outbound') NOT NULL default 'inbound',
  `ToAddr` varchar(255) NOT NULL default '',
  `FromAddr` varchar(255) NOT NULL default '',
  `CCAddrs` varchar(255) NOT NULL default '',
  `Subject` text NOT NULL,
  `ParentIssueElementId` int(11) default NULL,
  `ParentIssueElementType` enum('mail','phone') default 'mail',
  `AgentId` int(11) NOT NULL default '0',
  PRIMARY KEY  (`Id`),
  KEY `date_idx` (`Date`),
  KEY `IssueId` (`IssueId`),
  KEY `idx_agent_id` (`AgentId`)
) ENGINE=MyISAM AUTO_INCREMENT=15099881 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

Заранее спасибо,

Ответы [ 4 ]

3 голосов
/ 03 февраля 2010

По количеству строк

Некоторые механизмы хранения, такие как MyISAM, хранят точное количество. Для других механизмов хранения, таких как InnoDB, это значение является приблизительным и может отличаться от фактического значения на целых 40-50%.

Взято из Справочное руководство по MySQL :: MySQL 5.1 - ПОКАЗАТЬ Синтаксис ТАБЛИЦЫ

2 голосов
/ 03 февраля 2010

Таблица должна быть InnoDB.

С ПОКАЗАТЬ СТАТУС Doc

Ряды

Количество строк. Некоторые механизмы хранения, такие как MyISAM, хранят точное количество. Для других механизмов хранения, , таких как InnoDB, это значение является приблизительным и может отличаться от фактического значения на 40-50% . В таких случаях используйте SELECT COUNT (*), чтобы получить точный счет.

1 голос
/ 05 февраля 2010

ОК, похоже, что это ошибка сообщена и исправлена ​​. Думаю, мне нужно наконец обновить Etch до Lenny и получить эти новые пакеты ... спасибо, что попробовали все.

0 голосов
/ 10 июля 2011

В случае, если вы используете InnoDB, кажется, что строки рассчитываются путем деления «Data_length» на «Avg_row_length» (который сильно колеблется).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...