SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 17.01.2008 08:26:31

Archy
Участник
Зарегистрирован: 17.01.2008
Сообщений: 3

Как установить ограничения на размер таблицы? Базы?

В базу данных потихоньку сохраняется в день пара тройка десятков килобайт... А диск не резиновый. как-нибудь можно в MySQL 5.0.45 установить ограничение на размер таблицы или базы данных? И если можно то что будет происходить при переполнении? Затирание старых данных или ф топку посланы будут новые?

Неактивен

 

#2 17.01.2008 13:39:36

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

Re: Как установить ограничения на размер таблицы? Базы?

Нет, никак ограничить размер изнутри MySQL нельзя, т.к. это не несет смысла.

Вы можете ограничить размер файлов с помощью квот операционной системы.
При этом Вы будете получать при заполнении базы ошибки типа "не могу выделить
место на диске", когда закончится квота.

Неактивен

 

#3 17.01.2008 13:41:52

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

Re: Как установить ограничения на размер таблицы? Базы?

Еще подумал smile Вы можете ограничить таблицу MyISAM по количеству строк (приблизительно)
командой типа ALTER TABLE `table` MAX_ROWS=100000;

Это _не_ команда ограничения жесткого, но она устанавливает размер указателя такой, чтобы
вмещать нужное количество строк. При этом при переполнении таблицы Вы будете получать
ошибки типа "Out of pointer space".

Неактивен

 

#4 18.01.2008 07:18:23

Archy
Участник
Зарегистрирован: 17.01.2008
Сообщений: 3

Re: Как установить ограничения на размер таблицы? Базы?

м... прочитал на http://www.botik.ru/~rldp/mysql/mysqlpro/triggers.htm что с версии 5.0.2 в mysql триггеры реализованы. попробую тогда их нацарапать. чтобы перед записью проверяли количество строк в таблице и удаляли старые.

Неактивен

 

#5 18.01.2008 09:57:15

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

Re: Как установить ограничения на размер таблицы? Базы?

Триггер будет вызываться на каждое добавление строки. Это будет влиять
на производительность системы в целом. Возможно, если Вас волнует 20кб данных
в день, Вас также будет волновать возросшее потребление производительных
ресурсов системы.

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

Неактивен

 

#6 18.01.2008 11:57:12

Archy
Участник
Зарегистрирован: 17.01.2008
Сообщений: 3

Re: Как установить ограничения на размер таблицы? Базы?

paulus написал:

Это будет влиять на производительность системы в целом.

хм... спасиб. я об этом как-то не подумал sad

paulus написал:

Если Вас устраивает система с удалением старых строк, проще всего удалять
их раз в день (например, ночью).

да, пожалуй, так и сделаю. smile

Неактивен

 

#7 18.01.2008 23:38:04

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Как установить ограничения на размер таблицы? Базы?

с версии 5.0.2 в mysql триггеры реализованы. попробую тогда их нацарапать. чтобы перед записью проверяли количество строк в таблице и удаляли старые.

К сожалению, так не получится, т.к. триггер не сможет модифицировать строки из той же таблицы (если сделаете такой триггер и он сработает - получите ошибку 1442).
Придется Вам, видимо, воспользоваться периодически запускающимся скриптом, который удаляет данные.
Кстати, данные будут занимать меньше в таблице c ENGINE = ARCHIVE
http://dev.mysql.com/tech-resources/art … ngine.html
Вместо удаления можно их в такую таблицу переносить - вдруг потом понадобятся.

Неактивен

 

#8 11.10.2018 15:56:46

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Как установить ограничения на размер таблицы? Базы?

paulus написал:

Нет, никак ограничить размер изнутри MySQL нельзя, т.к. это не несет смысла.

Вы можете ограничить размер файлов с помощью квот операционной системы.
При этом Вы будете получать при заполнении базы ошибки типа "не могу выделить
место на диске", когда закончится квота.

Что-то не вышло у меня

CREATE TABLE `table` (    `name` INT NULL)  ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci MAX_ROWS=3;
 

Создал таблицу и спокойно добавил 5 строк


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#9 11.10.2018 16:03:38

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Как установить ограничения на размер таблицы? Базы?

Ясно сказано

paulus написал:

Нет, никак ограничить размер изнутри MySQL нельзя, т.к. это не несет смысла.
Вы можете ограничить размер файлов с помощью квот операционной системы.

А Вы все равно пытаетесь использовать MySql. Тогда смотрите в сторону триггеров или

INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<3

Неактивен

 

#10 11.10.2018 16:42:42

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Как установить ограничения на размер таблицы? Базы?

А вот это уже интересно, надо попробовать. Но это придется в запрос писать, что может быть не очень удобно. Хотелось бы ограничить на уровне базы. С триггерами да выходит, но мне посоветовали параметр MAX_ROWS, вот я и думаю, почему он не работает. Его же проще добавить, чем триггер использовать.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#11 11.10.2018 16:46:08

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Как установить ограничения на размер таблицы? Базы?

И опять же если мне нужно снять ограничение, то нужно запрос менять. А может тогда если MAX_ROWS не работает, то можно его хотя бы как-то по другому использовать.
Скажем если он есть то делаем
WHERE (SELECT COUNT(*) FROM tbl_name)<3
или
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<MAX_ROWS
ну или как-то типа
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<(select MAX_ROWS from tbl_name )


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#12 11.10.2018 19:57:51

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Как установить ограничения на размер таблицы? Базы?

тяжело следить за обсуждением одного вопроса сразу по нескольким темам

platedz написал:

параметр MAX_ROWS, вот я и думаю, почему он не работает.

на это уже был ответ - это не жесткий предел, а скорее подсказка механизму хранения, что таблица должна иметь возможность хранить по крайней мере столько строк.

platedz написал:

И опять же если мне нужно снять ограничение, то нужно запрос менять. А может тогда если MAX_ROWS не работает, то можно его хотя бы как-то по другому использовать.
Скажем если он есть то делаем
WHERE (SELECT COUNT(*) FROM tbl_name)<3
или
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<MAX_ROWS
ну или как-то типа
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<(select MAX_ROWS from tbl_name )

чем не устраивает триггер? это явно проще чем в каждый запрос добавлять условие.

Неактивен

 

#13 11.10.2018 21:45:45

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Как установить ограничения на размер таблицы? Базы?

vasya написал:

тяжело следить за обсуждением одного вопроса сразу по нескольким темам

platedz написал:

параметр MAX_ROWS, вот я и думаю, почему он не работает.

на это уже был ответ - это не жесткий предел, а скорее подсказка механизму хранения, что таблица должна иметь возможность хранить по крайней мере столько строк.

platedz написал:

И опять же если мне нужно снять ограничение, то нужно запрос менять. А может тогда если MAX_ROWS не работает, то можно его хотя бы как-то по другому использовать.
Скажем если он есть то делаем
WHERE (SELECT COUNT(*) FROM tbl_name)<3
или
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<MAX_ROWS
ну или как-то типа
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<(select MAX_ROWS from tbl_name )

чем не устраивает триггер? это явно проще чем в каждый запрос добавлять условие.

Да всем устраивает. Просто изучаю, какие варианты возможны в принципе.
В любом случае большое спасибо за ответы. Вы самый грамотный и отзывчивый форум по SQL изо всех мне знакомых


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

Board footer

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