Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Bind Variables....  [new]
servel1
Member

Откуда:
Сообщений: 57
Всем привет
Такой вопрос
Из программы делаю insert в таблицу.
при использовании BIND переменной insert выполняется намного медленнее чем при использовании литералов. (C# Oracle)
Вот код с BIND

for(...)
{
o_cmd.CommandText = "insert into tab1 values(:v1,:v2,:v3)";
o_cmd.Parameters.Add(":v1", di.FullName);
o_cmd.Parameters.Add(":v2", fi.Name);
o_cmd.Parameters.Add(":v3", fi.Length.ToString());
o_cmd.ExecuteNonQuery();
}

и с литералом
for(...)
{
o_cmd.CommandText = "insert into tab1 values('" + di.FullName + "','" + fi.Name + "','" + fi.Length.ToString() + "')";
o_cmd.ExecuteNonQuery();
}

Подскажите пожалуйста причину.
25 янв 08, 10:49    [5201748]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
ИМХО Вы как-то не так меряете время или подтормаживает ГУИ на какой-то операции.

"Намного медленнее" - это сколько в переводе на пощупать?
25 янв 08, 10:57    [5201816]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
servel1
Member

Откуда:
Сообщений: 57
Примерно в 3 раза медленее.
25 янв 08, 11:03    [5201874]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Медленнее какой цифры?
И повторюсь - меряете Вы как-то не так. Вы уверены, что меряете время именно insert-а и оба эксперимента при всех остальных равных условиях? Было померяно один раз или повторяется при повторении?
25 янв 08, 11:17    [5202018]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
Elic
Member

Откуда:
Сообщений: 29976
servel1
Из программы делаю insert в таблицу.
STFF Замедление массовой вставки записей
25 янв 08, 11:21    [5202051]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
LLE2
Guest
А вот так можна сделать ?

o_cmd.CommandText = "insert into tab1 values(:v1,:v2,:v3)";
for(...)
{
o_cmd.Parameters.Add(":v1", di.FullName);
o_cmd.Parameters.Add(":v2", fi.Name);
o_cmd.Parameters.Add(":v3", fi.Length.ToString());
o_cmd.ExecuteNonQuery();
}
25 янв 08, 11:22    [5202063]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
Артемис
Member

Откуда: Москва
Сообщений: 20
Клиент какой?
Вынесите создание и добавление параметров из цикла, внутри - только присваивание, цикл оберните в транзакцию и фиксируйте в после него.
25 янв 08, 11:24    [5202079]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
servel1
Member

Откуда:
Сообщений: 57
Медленнее какой цифры?
И повторюсь - меряете Вы как-то не так. Вы уверены, что меряете время именно insert-а и оба эксперимента при всех остальных равных условиях? Было померяно один раз или повторяется при повторении?
Условия абсолютно одинаковые (работает один и тот-же код - просто коментирую то одну часть кода то другую). С литералом выполняется 10 минут а с BIND переменнои 28 минутю. Было померяно раз десять.
25 янв 08, 11:29    [5202122]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
KoTTT
Member

Откуда: Екб
Сообщений: 1511
Артемис
Клиент какой?
Вынесите создание и добавление параметров из цикла, внутри - только присваивание, цикл оберните в транзакцию и фиксируйте в после него.

+1
А еще смотрите в сторону вставки массивами.
25 янв 08, 11:33    [5202168]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
servel1
Member

Откуда:
Сообщений: 57
LLE2
Не помогает....
25 янв 08, 11:42    [5202264]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
Артемис
Member

Откуда: Москва
Сообщений: 20
Покажите план.
25 янв 08, 11:44    [5202290]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
LLE2
Guest
servel1
LLE2
Не помогает....

java?
25 янв 08, 12:11    [5202545]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
servel1
Вот код с BIND
for(...)
{
o_cmd.CommandText = "insert into tab1 values(:v1,:v2,:v3)";                    
o_cmd.Parameters.Add(":v1", di.FullName);
o_cmd.Parameters.Add(":v2", fi.Name);
o_cmd.Parameters.Add(":v3", fi.Length.ToString());
o_cmd.ExecuteNonQuery();
}
Ты что, переменные каждый раз в цикле создаешь?
25 янв 08, 13:23    [5203186]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
K. Oleg
Member

Откуда:
Сообщений: 8
Во втором случае каждый раз происходит полный разбор предложения.
Если for достаточно большой - резко увеличивается время выполнения.
25 янв 08, 13:26    [5203206]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
servel1
Member

Откуда:
Сообщений: 57
C# код
----------------------------
o_cmd.CommandText = "insert into tab1 values(:v1,:v2,:v3)";
o_cmd.Parameters.Add("v1",null);
o_cmd.Parameters.Add("v2", null);
o_cmd.Parameters.Add("v3", null);
for(...)
{
o_cmd.Parameters[0].Value = di.FullName;
o_cmd.Parameters[1].Value = fi.Name;
o_cmd.Parameters[2].Value = fi.Length.ToString();
o_cmd.ExecuteNonQuery();
}

Работает на 4 процента быстрее чем с литераломи (хотя я ожидал что разница будет больше)
Всем спасибо.....
25 янв 08, 13:50    [5203401]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
Elic
Member

Откуда:
Сообщений: 29976
servel1
Работает на 4 процента быстрее чем с литераломи (хотя я ожидал что разница будет больше)
Нужно уметь выбирать инструменты.
К примеру, SQL*Loader уделает твоё "нетленное творение" как слон моську
25 янв 08, 14:10    [5203573]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
servel1
Работает на 4 процента быстрее чем с литераломи (хотя я ожидал что разница будет больше)

Трассу 10046 покажите с обоих случаев. Чтобы мы увидели, на чьей стороне тормоза - на сервере или таки на c#
25 янв 08, 14:17    [5203629]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
Elic
Member

Откуда:
Сообщений: 29976
andrey_anonymous
на сервере или таки на c#
Или, в том числе по дороге между ними :)
25 янв 08, 14:29    [5203721]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Elic
andrey_anonymous
на сервере или таки на c#
Или, в том числе по дороге между ними :)

Эт врядли - "литеральный" вариант "летает"...
25 янв 08, 14:30    [5203729]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
Elic
Member

Откуда:
Сообщений: 29976
andrey_anonymous
Эт врядли - "литеральный" вариант "летает"...
Наверное.
Я это к тому, что он не видел, как можно летать :)
25 янв 08, 14:34    [5203750]     Ответить | Цитировать Сообщить модератору
 Re: Bind Variables....  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Elic
andrey_anonymous
Эт врядли - "литеральный" вариант "летает"...
Наверное.
Я это к тому, что он не видел, как можно летать :)

Это уже второй этап - сравнение поделки с SQL*Loader хотябы даже и conventional :)
25 янв 08, 14:48    [5203839]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить