![]() |
внешние источники данных (а именно внешняя база SQL) 8-ка sql-ная, sql-сервер 2008, тамже находится внешняя база sql, к которой обращаюсь. Сейчас провожу тест на производительность системы, т.е. под двумя юзерами выполняю одну и ту же загрузку из внешней базы sql. Определил отдельные таблицы внешней базы во внешних источниках 8-ки, наделал запросов к ним, и вот при одновременном выполнении запросов под двумя юзерами, выскакивает иногда такая ошибка SQL State: HY000 Native:0 Message:[Microsoft][ODBC SQL Server]Подключение занято до получения результатов для другого hstmt. Как бы понятно в общих чертах, т.е. совпадает так, что когда один пытается обратится к таблице, воторой ее еще "не отпустил", но как этого избежать? может в самих запросах какая-то настройка есть, или еще где флажок поставить? если кто-то сталкивался с подобными ошибками именно в 8-ке во внешних источниках данных, прошу мимо не проходить)) |
0-SIA1987 >Строку подключения покажи. |
DRIVER={SQL Server**;SERVER=main_server;DATABASE=main_base |
А если указать таймаут в настройках драйвера ODBC (или прямо в строке подключения)? Дело в том что по стандарту ODBC - ошибка возникнет только после истечения таймаута, а по умолчанию он нулевой. На моей практике, если запрос выполняется 10 секунд - достаточно 5 сек таймаута, чтобы частота возникновения ошибки при трех юзерах уменьшилась в 100 раз. |
3 - а разве нельзя в тех же настройках подключения выбрать такой тип блокировок, чтобы не блокировались таблицы при чтении, а увеличение таймаута, ну это крайний вариант, и то который я не знаю как сделать |
SIA1987 - можно, но это зависит от ODBC драйвера и самой СУБД. Я работаю с SQLite - при записи блокируется ВСЯ база, при чтении - блокируется пятый и последующие потоки, плюс есть еще и файловые блокировки со стороны ОС - вот и остается только таймаут. Пан. управления - Адм-е - Ист данн ODBC - выбрать драйвер - открыть диалог настроек - поле Timeout - ввести значение. |
а пример заполнения параметров драйвера можно? |
5 - и где это вообще настраивать нужно, на сервере где внешняя база sql лежит к которой идут запросы? |
извините за назойливость, но проблема так и осталось нерешенной, вообще меня больше интересует идея, которую попытался развить Billi, есть же наверное параметр в адресной строке, которые не блокирует таблицы при чтении |
а запрос то покажешь может? |
ну к примеру самый маленький из них выбрал, запросы сформированы конструктором запросов ВЫБРАТЬ | dbo_orders.Ссылка, | dbo_orders.name, | dbo_orders.idorder, | dbo_orders.idcustomer.idcustomer КАК idcustomer, | dbo_addclassification.name КАК name1, | dbo_customer.addnum |ИЗ | ВнешнийИсточникДанных.ecad_okon.Таблица.dbo_orders КАК dbo_orders | ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ecad_okon.Таблица.dbo_customer КАК dbo_customer | ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ecad_okon.Таблица.dbo_addclassification КАК dbo_addclassification | ПО dbo_customer.idaddclassification1 = dbo_addclassification.Ссылка | ПО dbo_orders.idcustomer = dbo_customer.Ссылка |ГДЕ | dbo_orders.name = &name" |
2-SIA1987 >Для начала попробуй работать со скулем через его собственного клиента: Driver={SQL Server Native Client 10.0**; |
тоже самое, только ругается на другой драйвер)) Ошибка ODBC. SQLSTATE: HY000 Номер ошибки: 0 Описание: [Microsoft][SQL Server Native Client 10.0]Connection is busy with results for another command |
строка подключения вот такая: DRIVER={SQL Server Native Client 10.0**;dsn=ecad_okon;SERVER=server-poz;database=ecad_okon вроде бы добавил пользовательский dsn там по умолчанию стояло long query time 30000 млс, добавлял пользовательский dsn на машине, где стоит база ecad_okon, к которой формирую запросы |
Текущее время: 17:00. Часовой пояс GMT +3. |