Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.53 MB
Время: 0.047 c
2-1176292688
Priest
2007-04-11 15:58
2007.04.29
Как проверить наличие поддерева в XML


15-1175363532
homm
2007-03-31 21:52
2007.04.29
В борланд С++ 5.02 не компицца :(


1-1172838273
Юрий_К
2007-03-02 15:24
2007.04.29
Как дебагить процесс инициализации?


9-1148936287
TButton
2006-05-30 00:58
2007.04.29
OGL


15-1175711002
Kostafey
2007-04-04 22:23
2007.04.29
Что за баг такой странный: Circular datalinks are not allowed.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский