SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.12.2009 17:53:40

denisimus
Участник
Зарегистрирован: 30.10.2008
Сообщений: 18

Размер занимаемой памяти memory таблицей

Есть таблица тестовая со структурой

CREATE TABLE IF NOT EXISTS `atest` (
  `first_field` int(10) unsigned NOT NULL default '0'
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Когда таблица пуста PMA показывает
Данные      0      Байт
Индекс     0     Байт
Всего     0     Байт

Добавляю одну строку
INSERT INTO `dateland_data`.`atest` (`first_field`) VALUES ('1');

PMA показывает
Данные      10,262.0      КБ
Индекс     0     Байт
Всего     10,262.0     КБ

Если дальше эксперементировать, то размер таблицы при увеличении срток не будет увеличиваться, до достежении определенного предела.
При увеличении строк в таблице больше этого предела, размер таблицы увеличится тоже скачком, я давно этот тест делал, кажется он станет 20 МБ или что-то такое.


1) Верно что мускул при создании Memory таблицы резервирует для нее определенный объем памяти, даже если данных реально меньше?
И все эти 10Мб реально сидят в оперативке, хотя таблица почти пуста?

2) Есть ли настройка у мускула которая влияет на этот размер резервируемой памяти под Memory таблицу?


Спасибо.

Неактивен

 

#2 03.12.2009 18:16:55

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Размер занимаемой памяти memory таблицей

Почти верно. Память выделяется страницами, а внутри страниц нужно выделять
дополнительно память под внутренние структуры (например, адресацию строк
внутри таблицы). Уменьшить это значение можно, если, напрмиер, Вы знаете,
что табличка будет маленькая. Тогда можно ограничить размер адресации
(и тем самым уменьшить объем, выделяемый для хранения этих структур):

[aquatica] root test > show table status like 'atest'\G
*************************** 1. row ***************************
           Name: atest
         Engine: MEMORY
        Version: 10
     Row_format: Fixed
           Rows: 1
 Avg_row_length: 5
    Data_length: 129032
Max_data_length: 10485760
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: NULL
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_unicode_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0,00 sec)

[aquatica] root test > alter table atest max_rows=100;
Query OK, 2 rows affected (0,05 sec)
Records: 2  Duplicates: 0  Warnings: 0

[aquatica] root test > show table status like 'atest'\G
*************************** 1. row ***************************
           Name: atest
         Engine: MEMORY
        Version: 10
     Row_format: Fixed
           Rows: 2
 Avg_row_length: 5
    Data_length: 80
Max_data_length: 500
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: NULL
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_unicode_ci
       Checksum: NULL
 Create_options: max_rows=100
        Comment:
1 row in set (0,00 sec)

Неактивен

 

#3 03.12.2009 19:44:35

denisimus
Участник
Зарегистрирован: 30.10.2008
Сообщений: 18

Re: Размер занимаемой памяти memory таблицей

да, спасибо очень помогло )
такие таблицы использую для хранения горячих данных, и таблицы не большие, не больше 1000-10000 строк
при ограничених даже на порядок больше, таблицы по размеру значительно меньше выделяемых по умолчанию 10МБ, по 100Кб-500Кб

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson