powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / неожиданные локи в таблице
3 сообщений из 3, страница 1 из 1
неожиданные локи в таблице
    #39035588
dmitrijk2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE TABLE `map_data2` (
  `vehicleID` int(11) NOT NULL,
  `eventDate` int(11) unsigned NOT NULL,
  `recordType` tinyint(1) NOT NULL DEFAULT '0',
  `latitude` decimal(10,7) NOT NULL DEFAULT '0.0000000',
  `longitude` decimal(10,7) NOT NULL DEFAULT '0.0000000',
  `refEventDate` int(11) unsigned NOT NULL,
  `speed` decimal(10,3) NOT NULL DEFAULT '0.000',
  `direction` smallint(3) DEFAULT NULL,
  `isSpeeding` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `isIgnitionOn` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `isGSMOn` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `isRoamingOn` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `isGPSDataValid` tinyint(1) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`vehicleID`,`eventDate`,`recordType`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50500 PARTITION BY RANGE  COLUMNS(eventDate)
(PARTITION 2015_JUL VALUES LESS THAN (204940800) ENGINE = InnoDB,
 PARTITION 2015_AUG VALUES LESS THAN (207619200) ENGINE = InnoDB,
 PARTITION 2015_SEP VALUES LESS THAN (210297600) ENGINE = InnoDB,
 PARTITION 2015_OCT VALUES LESS THAN (212889600) ENGINE = InnoDB,
 PARTITION PMAX VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */



в ней сейчас около 1 млрд записей

дополнительно: поле "recordType" может иметь всего три значения [-1,0,1] и в принципе вообще не нужно в ключе, ибо пара "vehicleID + eventdDate" уникальна. Но из-за большого количества записей переделать ключ проблематично.

Итак, проблема: в базе неожиданно возникают локи по этой таблице и из-за них тормозят запросы delete/insert:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
mysql> select * from information_schema.innodb_locks;
+---------------------------+-------------+-----------+-----------+-------------------------------------------------------------+------------+------------+-----------+----------+-------------------------+
| lock_id                   | lock_trx_id | lock_mode | lock_type | lock_table                                                  | lock_index | lock_space | lock_page | lock_rec | lock_data               |
+---------------------------+-------------+-----------+-----------+-------------------------------------------------------------+------------+------------+-----------+----------+-------------------------+
| 14826966148:1759:270471:2 | 14826966148 | X         | RECORD    | `fas_map_processing`.`map_data2` /* Partition `2015_SEP` */ | PRIMARY    |       1759 |    270471 |        2 | 203800031, 207856044, 1 |
| 14817536341:1759:270471:2 | 14817536341 | S         | RECORD    | `fas_map_processing`.`map_data2` /* Partition `2015_SEP` */ | PRIMARY    |       1759 |    270471 |        2 | 203800031, 207856044, 1 |
+---------------------------+-------------+-----------+-----------+-------------------------------------------------------------+------------+------------+-----------+----------+-------------------------+

mysql> show processlist;
+--------+------+-----------------+----------------------------+---------+------+--------------+------------------------------------------------------------------------------------------------------+
| Id     | User | Host            | db                         | Command | Time | State        | Info                                                                                                 |
+--------+------+-----------------+----------------------------+---------+------+--------------+------------------------------------------------------------------------------------------------------+
| 130495 | root | localhost:40761 | fas_procedures             | Query   |   30 | updating     | delete from fas_map_processing.map_data2 where vehicleID = pVehicleID and eventDate >= pStartDate    |
+--------+------+-----------------+----------------------------+---------+------+--------------+------------------------------------------------------------------------------------------------------+





По логике кода запросы delete/insert выполняются неконкурентно - либо тот либо другой в один момент времени. insert вызывается из Java кода в виде батча, а delete реализован внутри хранимой процедуры.

Какие могут быть причины возникновения лока?
...
Рейтинг: 0 / 0
неожиданные локи в таблице
    #39035913
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitrijk2002По логике кода запросы delete/insert выполняются неконкурентно - либо тот либо другой в один момент времени.Это почему вы так уверены?
...
Рейтинг: 0 / 0
неожиданные локи в таблице
    #39036121
dmitrijk2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так реализовывали. код выполняется однопоточно, Insert идет следом за delete
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / неожиданные локи в таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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