Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.29;
Скачать: CL | DM;

Вниз

ADO - большой файл(~184 Мб) в блоб   Найти похожие ветки 

 
Gin2   (2007-02-09 15:55) [0]

Мастера, загружаю в базу файл:

...
 if not OpenDialog1.Execute() then
 begin
   Exit;
 end;
 ADOCommand1.Parameters.ParamByName("FileData").LoadFromFile(OpenDialog1.FileName , ftVarBytes);
 ADOCommand1.Execute();
...

СУБД - MSQL 2000 SP4+hot fixes. D7. Вываливается ошибка -

Project Project1.exe raised exception class EOleException with message "Неопознанная ошибка". Process stopped. Use Step or Run to continue.

Кто борол?


 
alex_*** ©   (2007-02-09 15:56) [1]

а маленькие грузятся?


 
Gin2   (2007-02-09 15:57) [2]

да, пробовал 80 МБ - все ок. Место на диске есть - 8 Гб.


 
Alarm ©   (2007-02-09 16:01) [3]

а ума хватает сменить технологию. (Уже даже не спрашиваю о БД...) Не приходило ли на "интуицию" сменить подход к решению задачи ...


 
Gin2   (2007-02-09 16:07) [4]


> Alarm ©   (09.02.07 16:01) [3]

не понял.
ADO родное для MS SQL...


 
alex_*** ©   (2007-02-09 16:09) [5]

я то же что-то не понял. Не будет ли любезен товарищ сразить нас наповал своими знаниями


 
Alarm ©   (2007-02-09 16:11) [6]

В принципе, конечно, согласен. Смущают размеры (объемы). Чем это могло бы быть (184Мгб). Попробую у себя,а потом отвечу


 
Gin2   (2007-02-09 16:13) [7]


> Alarm ©   (09.02.07 16:11) [6]

какая разница?
ну допустим архив чего-то там. придумайте.


 
Gin2   (2007-02-09 16:21) [8]

Попробовал так сказать другой подход:

...
 if not OpenDialog1.Execute() then
 begin
   Exit;
 end;
 ADODataSet1.Open();
 ADODataSet1.Edit();
 TBLOBField(ADODataSet1.FieldByName("FileData")).LoadFromFile(OpenDialog1.FileNam e);
 ADODataSet1.Post();
...

теперь и маленькие файлы(80 Мб) не грузит. На этапе загрузки в болб-поле память жрется, процессор 100%, и висим...До поста даже не доходит, такое ощущение что в память сует весь файл.


 
sniknik ©   (2007-02-09 16:22) [9]

Alarm ©   (09.02.07 16:01) [3]
это к чему? хорошенький подход... "не получилось ездить на велосипеде, бросай, садись на мотоцикл... облом с ним, нафиг его, иди в летчики! и т.д. гденибудь да получится".

Gin2   (09.02.07 15:55)
> Кто борол?
а надо? наверняка проблема не в дельфи/mssql а в твоем коде. (тут както была тема аналогичная, только цифра там была поскромнее, вроде 64мг, так для проверки тогда загрузил файл в 10 раз больший 640мг. "проблема" не подтвердилась. счас проверять не буду. сам тщательнее проверь/проверки сделай, может вынести код загрузки в "чистое" приложение и т.д.)


 
Desdechado ©   (2007-02-09 16:24) [10]

> На этапе загрузки в болб-поле память жрется, процессор 100%, и висим..
Натурально. Ты же в датасет загоняешь...


 
Gin2   (2007-02-09 16:26) [11]


> sniknik ©   (09.02.07 16:22) [9]

чистее некуда, вот то что я привел в первом посте.


 
sniknik ©   (2007-02-09 16:26) [12]

кстати сколько памяти на компе? (у меня 2гб но и меньше должно хватать...)


 
Gin2   (2007-02-09 16:28) [13]


>  ADOCommand1.Parameters.ParamByName("FileData").LoadFromFile(OpenDialog1.
> FileName , ftVarBytes);
>  ADOCommand1.Execute();

смотрю профайлером:

exec sp_executesql N"update [Table]
set [FileData] = @P1
where [id] = N""170DF0F5-D54C-4B6D-BBDB-A30E8DFD684F""", N"@P1 image", 0x

Интересно а как блоб поле ушло? чего его не видно? 0х и все... Хотя в базу файл лег - 100 Мб.


 
Gin2   (2007-02-09 16:29) [14]


> sniknik ©   (09.02.07 16:26) [12]

ОЗУ - 1Гб, ОС - ХР СП2.
я процессы смотрел он до пика не доходит. Всего под виртуальную выделено 2,4 Гб.


 
sniknik ©   (2007-02-09 16:31) [15]

> чистее некуда, вот то что я привел в первом посте.
а что ты привел? где ADOConnection, где параметры компонента (менялись ли от по умолчанию), где запрос выполняемый и структура таблицы изменяемой, тип поля?

нет, твой огрызок кода/описания тянет только на "чуть чуть больше чем ничего. и явно ничего полезного".

да еще напомнил, ошибка "Неопознанная ошибка"  ничего не говорящая, попробуй из коллекции ADOConnection.Errors вытащить, может там понятнее будет.


 
Gin2   (2007-02-09 16:34) [16]


> sniknik ©   (09.02.07 16:31) [15]

ADOConnection1:

 object ADOConnection1: TADOConnection
   CommandTimeout = 0
   Connected = True
   ConnectionString =
     "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initi" +
     "al Catalog=Test
   LoginPrompt = False
   Provider = "SQLOLEDB.1"
   Left = 80
   Top = 32
 end

ADOCommand1:

 object ADOCommand1: TADOCommand
   CommandText =
     "update [Table]"#13#10"set [FileData] = :FileData"#13#10"where [id] = N"#39"1" +
     "70DF0F5-D54C-4B6D-BBDB-A30E8DFD684F"#39
   CommandTimeout = 0
   Connection = ADOConnection1
   Parameters = <
     item
       Name = "FileData"
       Attributes = [paNullable, paLong]
       DataType = ftVarBytes
       NumericScale = 255
       Precision = 255
       Size = 2147483647
       Value = Null
     end>
   Left = 184
   Top = 48
 end


 
Ega23 ©   (2007-02-09 16:34) [17]

bcp /?


 
sniknik ©   (2007-02-09 16:40) [18]

счас проверю
пока тоже проверь, ftVarBytes на ftBlob поменяй.


 
Gin2   (2007-02-09 16:44) [19]


>
> да еще напомнил, ошибка "Неопознанная ошибка"  ничего не
> говорящая, попробуй из коллекции ADOConnection.Errors вытащить,
>  может там понятнее будет.

Ошибок одна.
Error:
Number: -2147467259
Source: "Microsoft OLE DB Provider for SQL Server"
Description: "Неопознанная ошибка"
HelpFile: ""
HelpContext: 0
SQLState: ""
NativeError: 0


 
Gin2   (2007-02-09 16:46) [20]


> пока тоже проверь, ftVarBytes на ftBlob поменяй.

тоже самое.


 
Gin2   (2007-02-09 16:47) [21]


> Ega23 ©   (09.02.07 16:34) [17]
>
> bcp /?

это хорошо, но мне нужно через компоненты.


 
Gin2   (2007-02-09 16:51) [22]

поробовал 250 метров залить - Out of memory :(


 
Ega23 ©   (2007-02-09 16:52) [23]


> это хорошо, но мне нужно через компоненты.


Ну как хочешь...


 
Gin2   (2007-02-09 16:53) [24]


> Ega23 ©   (09.02.07 16:52) [23]

та с удовольствием :)
надо через компоненты...


 
sniknik ©   (2007-02-09 17:05) [25]

все нормально... вернее ничего неожиданного/неизвестного, первым попробовал файл 638мг дало Out Of Memory (ну чтож на работе памяти поменьше всего 1 гиг. понятно в общем)
вторым взял на 184мг, его положило без проблем, запрос типа твоего
(UPDATE name
SET Img = :Img
WHERE ID = 10)

>> пока тоже проверь, ftVarBytes на ftBlob поменяй.
> тоже самое.
а тип параметра? везде поставь.


 
sniknik ©   (2007-02-09 17:13) [26]

хотя, сам проверил поставил ftVarBytes... также все положилось (184мг)
не от этого похоже.


 
Gin2   (2007-02-09 17:17) [27]

Полез я в логи сервера:

2007-02-09 16:12:31.21 spid54    WARNING:  Failed to reserve contiguous memory of Size= 265551872.
2007-02-09 16:12:31.46 spid54    Buffer Distribution:  Stolen=64570 Free=6 Procedures=0
 Inram=0 Dirty=2 Kept=0
 I/O=0, Latched=19, Other=3
2007-02-09 16:12:31.46 spid54    Buffer Counts:  Commited=64600 Target=64816 Hashed=24
 InternalReservation=127 ExternalReservation=0 Min Free=128 Visible= 64816
2007-02-09 16:12:31.46 spid54    Procedure Cache:  TotalProcs=0 TotalPages=0 InUsePages=0
2007-02-09 16:12:31.46 spid54    Dynamic Memory Manager:  Stolen=64570 OS Reserved=768
 OS Committed=743
 OS In Use=737
 Query Plan=1 Optimizer=0
 General=822
 Utilities=11 Connection=64437
2007-02-09 16:12:31.51 spid54    Global Memory Objects:  Resource=732 Locks=35
 SQLCache=23 Replication=2
 LockBytes=2 ServerGlobal=20
 Xact=3
2007-02-09 16:12:31.51 spid54    Query Memory Manager:  Grants=0 Waiting=0 Maximum=47700 Available=47700
2007-02-09 16:12:32.21 spid54    Error: 17803, Severity: 20, State: 12
2007-02-09 16:12:32.21 spid54    Insufficient memory available..

Такое ощущение что ему не хватает ОЗУ :(


 
Gin2   (2007-02-09 17:18) [28]


> sniknik ©   (09.02.07 17:05) [25]

а какие у тебя настройки сервера по памяти? и какой сервак?


 
Gin2   (2007-02-09 17:32) [29]

Взял я выгрузил из ОЗУ почти весь левак и файл 184 лег, больше - опять таже трабла. Можно ли как-то узнать у сервера, какой размер он сможет принять? Или нет?
Спасибо.


 
sniknik ©   (2007-02-09 17:53) [30]

> а какие у тебя настройки сервера по памяти? и какой сервак?
у меня mssql не на сервере а на моей же машине, тот на котором эксперементирую. (может проблема в этом? операция длительная и конект у тебя во время нее "рвется")

2000й mssql (девелопер) на winxp, апдейты все стоят.
настройки mssql-я как поставились стандартные так и не менялись (кроме авторизации, включена mssql-ная) по памяти динамическое распределение, минимум 0 максимульное 1055, найдено(определено, внизу там) 1024.


 
sniknik ©   (2007-02-09 17:54) [31]

+ [30] в смысле, ты похоже на сервер ложиш с локальной станции?


 
Gin2   (2007-02-09 17:57) [32]


> sniknik ©   (09.02.07 17:53) [30]

тоже девелопер и тоже локально, но у меня максимум можно 991 Мб можно выделить.


 
Gin2   (2007-02-09 17:58) [33]


> в смысле, ты похоже на сервер ложиш с локальной станции?

да


 
sniknik ©   (2007-02-09 18:18) [34]

>> в смысле, ты похоже на сервер ложиш с локальной станции?
> да
т.е. у тебя 2 машины задействовано рабочая станция и сервер. тогда еше сеть добавляется (операция длительная...)  попробуй сменить протокол с named pipes на tcp/ip (или наоборот, смотря что счас стоит).


 
Gin2   (2007-02-09 18:20) [35]


> >> в смысле, ты похоже на сервер ложиш с локальной станции?
>
> > да

ну в смысле у меня сервак MS SQL и моя комп - это одна и таже физически тачка :)


 
Gin2   (2007-02-12 15:48) [36]

Кто знает, как заставить TADOCommand при update не оборачивать в sp_executesql запрос? Или это провайдер делает?


 
Ломброзо ©   (2007-02-12 16:51) [37]

А через ADODB.Stream, кусочками, байтовыми массивами, не пробовали?


 
Gin2   (2007-02-12 16:57) [38]

не пробовал.
Выяснилось что если блоб заполнять через ХП, как это делает провайдер при использовании параметров, то MS SQL тянет на сервер всю блобину в буфер...
Вот как послать запрос без ХП не понятно :(



Страницы: 1 вся ветка

Текущий архив: 2007.04.29;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.044 c
15-1175795915
vasIZmax
2007-04-05 21:58
2007.04.29
Диспечер устройств


6-1162293530
vcdima
2006-10-31 14:18
2007.04.29
POST запрос при помощи WinInet


6-1162540138
sfn
2006-11-03 10:48
2007.04.29
ICS — TWSocket


2-1175839373
Mikhail83
2007-04-06 10:02
2007.04.29
Interbase Генератор/Триггер не срабатывает


15-1175676092
Real
2007-04-04 12:41
2007.04.29
ICQ - Connection failed