powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
19 сообщений из 19, страница 1 из 1
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38407460
Aliced
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть восьмигиговый дамп базы.
Код: sql
1.
mysqldump -u root -p --single-transaction  --flush-logs    --ignore-table=...


Дополнительно перед заливкой делаю
Код: sql
1.
SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;



Заливка начинается резво, за первый час заливается порядка 10Г, а затем на одной и той же таблице процесс залипает. Причем в процессах видно, что вставка идет, данные в инсерте меняются, дата изменения файла ibdata1 меняется каждую минуту. А на деле файл растет очень медленно, несколько килобайт в час. За ночь файл вырос на 1,5г, и процесс продолжается уже почти сутки. Хотя аналогичные дампы с других баз (с такой же структурой, хотя могут быть и изменения) с таким размером дампа на этом же стенде заливались за 2-3 часа.
Триггеры на инсерт в таблице есть, но в дампе, как и положено, они заводятся только после заливки данных.

В чем могут быть грабли?
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38407474
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А FK и индексы на таблице есть?
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38407506
Aliced
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При заливки в пустую базу только этой одной таблицы та же картина.
Вот начало дампа:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; 
-- MySQL dump 10.13  Distrib 5.1.61, for Win64 (unknown)
--
-- Host: localhost    Database: ukmserver
-- ------------------------------------------------------
-- Server version	5.1.61-community

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `local_auth_account_journal`
--

DROP TABLE IF EXISTS `local_auth_account_journal`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `local_auth_account_journal` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account_id` int(11) NOT NULL DEFAULT '0',
  `amount` decimal(20,2) DEFAULT NULL,
  `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `source_type` smallint(6) unsigned NOT NULL DEFAULT '0',
  `source_id` varchar(40) NOT NULL DEFAULT '0',
  `cash_id` int(11) NOT NULL DEFAULT '0',
  `comment` text,
  `balance` decimal(20,2) DEFAULT NULL,
  `action_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`),
  UNIQUE KEY `date` (`date`,`id`),
  KEY `local_auth_account_journal_FK1` (`account_id`),
  KEY `account_id_date` (`account_id`,`date`),
  KEY `source_type` (`account_id`,`source_type`),
  KEY `source_type_date` (`account_id`,`source_type`,`date`),
  KEY `account_id_id` (`account_id`,`id`),
  CONSTRAINT `local_auth_account_journal_fk` FOREIGN KEY (`account_id`) REFERENCES `local_auth_account` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24605683 DEFAULT CHARSET=utf8 COMMENT='Проводки по счетам';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `local_auth_account_journal`
--

LOCK TABLES `local_auth_account_journal` WRITE;
/*!40000 ALTER TABLE `local_auth_account_journal` DISABLE KEYS */;
INSERT INTO `local_auth_account_journal` VALUES (



т.е. внешние ключи есть, но оно отключены на момент заливки
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38407514
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aliced,

а autocommit=0; зачем? убрать/переключить пробовали?
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38407545
Aliced
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сравнение дампа этой таблицы, сделанного из другой базы (которая заливалась быстро), дало отличие
Код: sql
1.
CREATE TABLE `local_auth_account_journal` (...) ENGINE=InnoDB AUTO_INCREMENT=24605683 DEFAULT CHARSET=utf8 COMMENT=...


AUTO_INCREMENT=24605683-может дать такие тормоза?

Код: sql
1.
SET autocommit=0;



Сейчас попробую убрать, но обычно эта опция значительно ускоряет процесс заливки, а не наоборот.
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38407608
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlicedAUTO_INCREMENT=24605683-может дать такие тормоза?
Нет. Это значение вообще не учитывается при заливке данных.
К тому же int(11) - максимально 2147483647, на 2 порядка больше.
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38407621
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
  UNIQUE KEY `date` (`date`,`id`),

индекс уникален изначально (содержит уникальный `id`), зачем тормозить вставку лишней проверкой уникальности?
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38407659
Aliced
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

К сожалению, структуру базы разрабатывала не я, и почему ключи описаны именно так, не скажу.
Для отключения проверки ключей (и ускорения, т.о.) используется
Код: sql
1.
SET unique_checks=0;

, смотрите самую первую строку дампа.
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38407962
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aliced, а вот этот дамп, он у вас в граните отлит или пересоздать его можно? если попробовать создать и залить его без поля comment, быстрее не будет?
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38408588
Aliced
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
убрала строчку с
Код: sql
1.
SET autocommit=0;


не помогло.

Убрала строчку
Код: sql
1.
  UNIQUE KEY `date` (`date`,`id`),


прямо из create table. Тоже не помогло.
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38408590
Aliced
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirAliced, а вот этот дамп, он у вас в граните отлит или пересоздать его можно? если попробовать создать и залить его без поля comment, быстрее не будет?

Да нет, можно сколько угодно, вот только что-то я не могу придумать, как мне дамп без одного столбца сделать, кроме как создать еще одну таблицу, только без этого столбца, скопировать туда данные и потом сделать дамп этой таблицы. Есть вариант попроще?
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38408877
Aliced
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удаление из таблицы текстового поля тоже не помогло.
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38408904
Aliced
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Убрала из запроса create table.. все ключи, кроме первичного.
Помогло!

Какие есть варианты быстрой заливки таблицы (более 3млн строк) с кучей индексов?

Создавать таблицу без индексов, заливать данные, а потом добавлять индексы?
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38408914
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlicedСоздавать таблицу без индексов, заливать данные, а потом добавлять индексы?Это как бы best practice.
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38409145
Aliced
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот best practice в mysqldump как-то реализован? --disable-keys для InnoDB не работает ведь.
А вручную править описания 500 таблиц...
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38412748
Aliced
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все равно плохо получается. Создаю таблицу, где есть только primary и foreign ключи, заливаю данные, включаю триггеры, (на все про все меньше 40минут) и выполяю
Код: sql
1.
2.
3.
4.
5.
6.
alter table local_auth_account_journal add UNIQUE KEY `date` (`date`,`id`),
 add  KEY `account_id_date` (`account_id`,`date`),
 add  KEY `account_id_id` (`account_id`,`id`),
 add  KEY `local_auth_account_journal_FK1` (`account_id`),
 add  KEY `source_type` (`account_id`,`source_type`),
 add  KEY `source_type_date` (`account_id`,`source_type`,`date`)


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

Как процесс ускорить?
В параллели запустить не получится, таблица при индекации лочится.
Перевести в MyIsam, проиндексировать и вернуть в InnoDB? Будет ли быстрее?
Тут еще есть вроде InnoDB-plugin, но у меня версия БД 5.1.6, а тут вроде другая версия выходит, и неизвестно, как местный софт на ней будет работать.
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38413604
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aliced,

Предлагаю попробовать следуюшее:

1. содать таблицу ВООБШЕ без ключей и залить туда данные.

1.5 как нибудь убедится что данные чистые и не заглючат на создание
инукальных и форенд ключей

2. СОдать все нужные ключи потом, включая примари и форенд.

3. раобратся с индексами и убрать ненужные.
например если есть индекс (А,Б,Ц), то индекс (А, Б)
скорее всего не нужем.
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38416926
kestrel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что показывает SHOW FULL PROCESSLIST во время создания индексов?
...
Рейтинг: 0 / 0
MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
    #38416931
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автордля создания каждого индекса таблица копируется заново
чего чего делается?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQLdump медленное восстановление одной конкретной таблицы, остальные-быстро
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]