0
- 01.08.2012 - 20:07
|
8-ка sql-ная, sql-сервер 2008, тамже находится внешняя база sql, к которой обращаюсь. Сейчас провожу тест на производительность системы, т.е. под двумя юзерами выполняю одну и ту же загрузку из внешней базы sql. Определил отдельные таблицы внешней базы во внешних источниках 8-ки, наделал запросов к ним, и вот при одновременном выполнении запросов под двумя юзерами, выскакивает иногда такая ошибка SQL State: HY000 Native:0 Message:[Microsoft][ODBC SQL Server]Подключение занято до получения результатов для другого hstmt. Как бы понятно в общих чертах, т.е. совпадает так, что когда один пытается обратится к таблице, воторой ее еще "не отпустил", но как этого избежать? может в самих запросах какая-то настройка есть, или еще где флажок поставить? если кто-то сталкивался с подобными ошибками именно в 8-ке во внешних источниках данных, прошу мимо не проходить)) | |
1
- 01.08.2012 - 20:10
| 0-SIA1987 >Строку подключения покажи. | |
2
- 01.08.2012 - 21:54
| DRIVER={SQL Server**;SERVER=main_server;DATABASE=main_base | |
3
- 02.08.2012 - 07:41
| А если указать таймаут в настройках драйвера ODBC (или прямо в строке подключения)? Дело в том что по стандарту ODBC - ошибка возникнет только после истечения таймаута, а по умолчанию он нулевой. На моей практике, если запрос выполняется 10 секунд - достаточно 5 сек таймаута, чтобы частота возникновения ошибки при трех юзерах уменьшилась в 100 раз. | |
4
- 02.08.2012 - 08:26
| 3 - а разве нельзя в тех же настройках подключения выбрать такой тип блокировок, чтобы не блокировались таблицы при чтении, а увеличение таймаута, ну это крайний вариант, и то который я не знаю как сделать | |
5
- 02.08.2012 - 09:56
|
SIA1987 - можно, но это зависит от ODBC драйвера и самой СУБД. Я работаю с SQLite - при записи блокируется ВСЯ база, при чтении - блокируется пятый и последующие потоки, плюс есть еще и файловые блокировки со стороны ОС - вот и остается только таймаут. Пан. управления - Адм-е - Ист данн ODBC - выбрать драйвер - открыть диалог настроек - поле Timeout - ввести значение. | |
6
- 02.08.2012 - 11:36
| а пример заполнения параметров драйвера можно? | |
7
- 02.08.2012 - 14:32
| 5 - и где это вообще настраивать нужно, на сервере где внешняя база sql лежит к которой идут запросы? | |
8
- 03.08.2012 - 15:17
| извините за назойливость, но проблема так и осталось нерешенной, вообще меня больше интересует идея, которую попытался развить Billi, есть же наверное параметр в адресной строке, которые не блокирует таблицы при чтении | |
9
- 03.08.2012 - 15:22
| а запрос то покажешь может? | |
10
- 03.08.2012 - 15:45
|
ну к примеру самый маленький из них выбрал, запросы сформированы конструктором запросов ВЫБРАТЬ | 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_custom er КАК dbo_customer | ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ecad_okon.Таблица.dbo_addcla ssification КАК dbo_addclassification | ПО dbo_customer.idaddclassification1 = dbo_addclassification.Ссылка | ПО dbo_orders.idcustomer = dbo_customer.Ссылка |ГДЕ | dbo_orders.name = &name" | |
11
- 03.08.2012 - 17:55
| 2-SIA1987 >Для начала попробуй работать со скулем через его собственного клиента: Driver={SQL Server Native Client 10.0**; | |
12
- 03.08.2012 - 21:19
|
тоже самое, только ругается на другой драйвер)) Ошибка ODBC. SQLSTATE: HY000 Номер ошибки: 0 Описание: [Microsoft][SQL Server Native Client 10.0]Connection is busy with results for another command | |
13
- 03.08.2012 - 21:23
|
строка подключения вот такая: DRIVER={SQL Server Native Client 10.0**;dsn=ecad_okon;SERVER=server-poz;database=ecad_okon вроде бы добавил пользовательский dsn там по умолчанию стояло long query time 30000 млс, добавлял пользовательский dsn на машине, где стоит база ecad_okon, к которой формирую запросы | |
| Интернет-форум Краснодарского края и Краснодара |