Предполагая, что вы говорите о Sybase ASE 16, поработайте с вашим администратором базы данных, чтобы отслеживать свои нагрузки, чтобы увидеть, где у вас возникают узкие места.
Основной упор будет сделан на сбор / анализ данных MDA (master..mon%
таблицы);Ключевыми элементами для поиска являются события ожидания / тайминги, а также производительность отдельных вставок (использование процессора / памяти, логические операции ввода-вывода и т. д.).
Выясните, нужно ли обновлять большое количество индексов.... или, возможно, запуск проверки RI / внешнего ключа ... или запуск триггеров ... все это может значительно снизить пропускную способность ваших вставок.
Некоторые общие идеи дизайна...
1) использовать подготовленные операторы (и убедитесь, что вы используете повторно подготовленный оператор вместо создания нового подготовленного оператора для каждой вставки) - цель состоит в том, чтобы исключить накладные расходы, связанные с компиляцией базы данных каждой инструкции вставки
2) пакетируйте ваши вставки (то есть, оберните в begin/commit tran
) и проверьте, какой размер подходит вам лучше - цель состоит в том, чтобы сократить количество относительно медленных записей журнала, которые БД должна выполнитьдля каждой транзакции
3) поскольку чтение (из вашего файла), вероятно, происходит быстрее, чем запись (в базу данных), обратите внимание на то, как ваш поток чтения читается вПотоки нескольких / параллельных писателей - цель состоит в том, чтобы убедиться, что вы не ограничиваетесь при записи
4), чтобы разделить ваши чтения (при каждом считывателе, поступающем в несколько / параллельных писателей), например, иметь отдельные потоки чтения, читаемые из разныхфайлы данных
5), как уже упоминалось lexicore, посмотрите, можете ли вы использовать утилиту ASE bcp
(на уровне ОС) для массовой загрузки данных