|
#1
|
|||
|
|||
Ado и MS SQL
Доброе время суток!
Есть MS база, надо в нее, в режиме реального времени заливать данные из файлов .тхт. Структура: Barcode |IndexTo|MailDirect RA145681496RU |0 |804 Файлы появляются еже минутно и в день заливается 300-500 тысяч записей. Через сутки(бывает и меньше) SQL сервер сходит с ума и зависает. Приходится перезагружать службы и приложение. Как решить проблему???? Для работы с базой использую АДО компоненты. |
#2
|
||||
|
||||
а если попробывать грузить файлы не на прямую в базу а через буфер (вспомогательную таблицу), а из нее грузить в основную например 1 раз в час. Или может грузить не каждый файл по отдельности а например сразу по 100 штук.
Последний раз редактировалось Admin, Сегодня в 10:32. |
#3
|
||||
|
||||
Цитата:
blsh, ну покаж как эти файлы обрабатываются. |
#4
|
|||
|
|||
Может будет лучше, если файлы будут в формате xml. В MSSQL очень удобная и быстрая работа с ними. У нас в день на сервера принимаются десятки тысяч записей в разные таблицы. Загрузка идет каждые 20 минут. Все отлично работает, ничего не падает. {поплевал и постучал по дереву}
|
#5
|
||||
|
||||
Возможно вы на каждую порцию транзакции применяете, вот у вас журнал и растет по дурному. Конечно без транзакций стремно, но для эксперимента можно попробовать, можно еще сам журнал задать фиксированный возможно поможет. Можно делать еще временный ежесуточный файл изменений, и вливать в основную БД из него раз в сутки.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
Код:
ADOConnection1.BeginTrans; ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Text:='INSERT INTO Barcodes_File(Barcode, Index_To, Country, Files_Name, DateTimes) SELECT '+QuotedStr(sID)+','+QuotedStr(sIndexTo)+','+QuotedStr(sMailDer)+','+QuotedStr(FileName)+','+QuotedStr(DateTimeToStr(Now))+' WHERE NOT EXISTS (SELECT 1 FROM Barcodes_File WHERE Barcode = '+QuotedStr(sID)+' and Files_Name = '+QuotedStr(FileName)+')'; ADOQuery1.ExecSQL; ADOConnection1.CommitTrans; |
#7
|
||||
|
||||
Я бы вам рекомендовал переписать весь этот блок как хранимку, т.к. я невижу в этом коде ничего, что-бы требовало его генерацию на клиенте.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 29.07.2010 в 13:06. |
#8
|
|||
|
|||
Я бы вам рекомендовал переписать весь этот блок как хранимку, т.к. я невижу в этом коде ничего, что-бы требовало его генерацию на клиенте.
-----можно поеснить???? |
#9
|
||||
|
||||
Цитата:
|
#10
|
|||
|
|||
Пробую! Но думаю врятли, т.к. были бы ошибки запроса!?
а у мя просто SQL перестает отвечать |
#11
|
||||
|
||||
Слушайте, я тут ваш SQL-код еще раз посмотрел, а он у вас точно работает без ошибок? Я там что-то не нашел From для первого селекта.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#12
|
|||
|
|||
По-моему, там нет слова FROM, потому что выборка для вставки идет не из таблицы. Это просто строка значений. => Каждая строка вставляется в отдельном запросе. Для каждой стрки отдельная транзакция. Поэтому так долго.
Последний раз редактировалось Kapitoshka438, 30.07.2010 в 13:36. |
#13
|
|||
|
|||
Kapitoshka438 - все верно!только вопрос не во времени а, Почему сервер падает!?
|
#14
|
||||
|
||||
Ну я же уже сделал предположение. Попробуйте для начала просто закоментить
Код:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#15
|
|||
|
|||
Цитата:
изначально было без этого,-появилось в процессе борьбы с проблемой т.е.безполезно |