Форум: "Базы";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.046 c