Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Deadlock при выпонении select / 16 сообщений из 16, страница 1 из 1
24.02.2017, 10:38
    #39409809
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
Прислали лог самодельного репликатора (на самом деле это не просто репликатор, а целый сервер, также обслуживает центральную базу, координирует базы "филиалов", и т.п.). Сказали, что ночью случилась ошибка которую никогда до этого не видели и данные перестали поступать из "филиалов". По логу удалось восстановить следующее:

1. Ночью запустился ежесуточный перерасчёт статистики индексов.
2. При пересчёте статистики индекса таблицы A, который автоматом создаётся для PK произошёл дэдлок. Транзакция откатилась.
3. Параллельно с этим при select-е из таблицы А произошёл дэдлок. Транзакция откатилась.
4. Теперь при любом select-е к таблице А происходит дэдлок. Причём это проявляется не только в репликаторе, но на всех клиентах, которые работают с центральной базой.

Как вообще такое могло произойти? У меня в голове дедлок вообще никак не вяжется с select.
...
Рейтинг: 0 / 0
24.02.2017, 11:13
    #39409815
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
ArtDenТеперь при любом select-е к таблице А происходит дэдлок.Вот так вот - пустой дедлок, без подробностей ? Он обычно не ходит один
...
Рейтинг: 0 / 0
24.02.2017, 12:24
    #39409843
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
К сожалению, подробностей нету. Ибо:
[02:27:07] (tr4788) INDEX_STAT/ERROR: Error text = deadlock
can't format message 13:87 -- message file D:\firebird.msg not found, error code = -913

[02:27:09] (tr2864) SERVER/ERROR: Exception during processing of incoming data: deadlock
can't format message 13:87 -- message file D:\firebird.msg not found


:(

Мой косяк. Зачем я fbclient.dll в дистрибутив засунул... Так что из подробностей, только наличие факта дэдока + тексты sql запросов, которые вызвали ошибки.
...
Рейтинг: 0 / 0
24.02.2017, 12:32
    #39409847
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
И кстати, почему нельзя сделать так, чтобы даже без firebird.msg текст ошибки был более осмысленным?
...
Рейтинг: 0 / 0
24.02.2017, 12:42
    #39409851
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
ArtDenИ кстати, почему нельзя сделать так, чтобы даже без firebird.msg текст ошибки был более осмысленным?Каким образом ? Придумать его ?

13:87 - это сообщение SQLERR, не самого движка. Означает deadlock.
Возможный твой косяк в том, что нужно весь статус парсить, или ты так и делаешь ?
...
Рейтинг: 0 / 0
24.02.2017, 12:55
    #39409858
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
Смутно понимаю, что имеется ввиду. В самописной либе для работы с FB исключения генерируются таким образом:

Код: plaintext
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.
static void check_status_vector(
	FbClient          &client,
	const ISC_STATUS  *status_vect,
	ErrorStatus       error_status,
	const std::string *sql = nullptr)
{
	if (is_status_vector_ok(status_vect)) return;

	char fb_msg[1024] = { 0 };
	const ISC_STATUS *status_vector_to_call = status_vect;
	client.fb_interpret(fb_msg, sizeof(fb_msg), &status_vector_to_call);

	ISC_LONG sql_code = client.isc_sqlcode(status_vect);
	char sql_msg[2048] = { 0 };
	client.isc_sql_interprete((ISC_SHORT)sql_code, sql_msg, sizeof(sql_msg));

	std::string whole_error_text;
	whole_error_text.append(fb_msg);
	whole_error_text.append("\n");
	whole_error_text.append(sql_msg);

	if ((error_status != ErrorStatus::Sql) && sql)
	{
		whole_error_text.append("\nsql=\n");
		whole_error_text.append(*sql);
	}

	switch (error_status)
	{
	case ErrorStatus::Internal:
		throw InternalException(whole_error_text, sql_code, -1);
		break;

	case ErrorStatus::Transaction:
		throw TransactionException(whole_error_text, sql_code, -1);
		break;

	case ErrorStatus::Sql:
		if (sql)
			throw SqlException(whole_error_text, *sql, sql_code, -1);
		else
			throw Exception(whole_error_text, sql_code, -1);
		break;

	case ErrorStatus::Normal:
	default:
		throw Exception(whole_error_text, sql_code, -1);
		break;
	}
}
...
Рейтинг: 0 / 0
24.02.2017, 12:59
    #39409860
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
ArtDen,

fb_interpret нужно вызывать в цикле, пока он не вернёт нулл.
Ты читаешь только первый код ошибки в статусе.
...
Рейтинг: 0 / 0
24.02.2017, 13:06
    #39409864
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
hvlad,

Это исправлю. Что насчёт deadlock? Есть идеи насчёт того, почему он мог там возникнуть?
...
Рейтинг: 0 / 0
24.02.2017, 13:08
    #39409867
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
ArtDen,

что-то пошло не так при обновлении статистики и повлияло на кеш метаданных.
Это только предположение.
После полного дисконнекта это должно пройти.
...
Рейтинг: 0 / 0
24.02.2017, 13:20
    #39409872
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
Да, после того, как репликатор остановили, select от других клиентов стал проходить без ошибок.

По поводу вытаскивания текста ошибки так нормально:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	std::string whole_error_text;

	char fb_msg[1024] = { 0 };
	const ISC_STATUS *status_vector_to_call = status_vect;

	for (;;)
	{
		client.fb_interpret(fb_msg, sizeof(fb_msg), &status_vector_to_call);
		whole_error_text.append(fb_msg);
		whole_error_text.append("\n");
		if (!status_vector_to_call) break;
	}


?
...
Рейтинг: 0 / 0
24.02.2017, 13:28
    #39409876
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
ArtDenтак нормально
Нет. Условие выхода из цикла неправильное.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2017, 13:29
    #39409877
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
ArtDenПо поводу вытаскивания текста ошибки так нормально:Вроде да

Укажи точную версию FB
...
Рейтинг: 0 / 0
24.02.2017, 14:17
    #39409911
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
Dimitry Sibiryakov,
А как правильно?

hvlad,
Версию запрошу. Я этот проект давно уже не поддерживаю. Со мной связались только потому, что основной разработчик ночью на телефонные звонки не отвечал :)
...
Рейтинг: 0 / 0
24.02.2017, 14:52
    #39409932
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
ArtDenА как правильно?
Код: plaintext
1.
2.
3.
4.
5.
while (client.fb_interpret(fb_msg, sizeof(fb_msg), &status_vector_to_call))
{
	whole_error_text.append(fb_msg);
	whole_error_text.append("\n");
}


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.02.2017, 14:23
    #39411640
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
Запросил версию сервера. Ответили
2.5.4.26856_0_Win32
Почему Win32 не спрашивайте. Не знаю. При мне туда ставили 64-битный вариант SS + добавили кучу памяти на сервер (ну и FB настроили на бОльшую производительность, т.к. база ожидалась огромной). Видимо успели переустановить :)
...
Рейтинг: 0 / 0
28.02.2017, 15:15
    #39411702
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock при выпонении select
ArtDen,

пусть обновляются до 2.5.7.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Deadlock при выпонении select / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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