powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
13 сообщений из 13, страница 1 из 1
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356296
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
Linux version 3.8.13-118.13.3.el6uek.x86_64 (mockbuild@x86-ol6-builder-04) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #2 SMP Fri Oct 21 14:30:26 PDT 2016

Выгрузка в текстовый файл через sqlplus без установки NLS_LANG происходит примерно со скоростью 3 Mb в секунду, но русский текст превращается в знаки вопроса.
Устанавливаю NLS_LANG в в соответствии с параметрами базы (AMERICAN_AMERICA.AL32UTF8) - скорость падает в три раза до ~1Mb в секунду, русский текст при этом сохраняется в исходном виде. В выборке есть два текстовых поля varchar2(4000), где русские символы встречаются не так уж часто.

Запрос выполняет конкатенацию полей таблицы через разделитель.
Скрипт в обоих случаях запускается тот же самый, выгрузка идет на стороне сервера.

Как объяснить такое радикальное падение скорости? Возможно, какие-то базовые вещи вылетели из памяти...

По умолчанию у sqlplus вроде какая-то 7-битная кодировка? Но тогда, кажется, наоборот, время должно было бы тратиться на тщетную попытку перекодировки из AL32UTF8...
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356309
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И.Как объяснить такое радикальное падение скорости?stdio
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356312
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую выгрузку через UTL_FILE, там будет с обычной скоростью записи на диск (плюс обработка PL/SQL потрохов, конечно), последний раз пробовал в 2013м году на оракле 10-ке, было порядка 10 Мбайт/с.
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356438
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Илья, ты же с termout off trimspool on работаешь + array_size установил?
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356478
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdmРекомендую выгрузку через UTL_FILE, там будет с обычной скоростью записи на диск (плюс обработка PL/SQL потрохов, конечно), последний раз пробовал в 2013м году на оракле 10-ке, было порядка 10 Мбайт/с.Как правило, медленнее, чем SPOOL из sqlplus на сервере

2ТС
Ну как бы в юникодице и количество байт для записи больше
А если поставить однобайтную русскую кодировку?
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356548
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сегодня как раз
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356562
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ответившим!

Сегодня как раз попробую варианты - раньше тоже, бывало, использовал UTL_FILE и выгружалось довольно быстро.
Просто изначально эта база была READ ONLY, но сейчас уже перевели в READ WRITE и теперь, действительно, можно сделать DIRECTORY для выгрузки и попробовать UTL_FILE. Все-таки одним посредником в лице sqlplus меньше. Попробуем.

Однобайтовая кодировка - да, понятно, возможно, причина в этом. По дефолту сейчас в окружении не задается NLS_LANG, что-то не нашел в документации по SQL*Plus, что в этом случае берется по умолчанию, но, кажется, действительно, какая-то однобайтовая семибитная кодировка. Возможно, при установке NLS_LANG библиотека stdio (как я понял, она подразумевалась в одном из ответов) начинает медленнее обрабатывать данные в Unicode и общая скорость обработки и записи падает. Было бы, наверное, неплохо иметь в sqlplus режим, в котором данные берутся как есть, минуя все NLS-преобразования строк, просто "as is". Если в этом дело.

По поводу настроек в sqlplus - использую такие (возможно, правда, что ARRAYSIZE несколько завышен):
SET ECHO OFF;
SET PAGESIZE 0;
SET LINESIZE 32767;
SET TRIMSPOOL ON;
SET FEEDBACK OFF;
SET TERMOUT OFF;
SET ARRAYSIZE 2000;

Предстоит миграция довольно значительного объема данных, отсюда и заморочки...
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356605
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И.По дефолту сейчас в окружении не задается NLS_LANG, что-то не нашел в документации по SQL*Plus, что в этом случае берется по умолчанию, но, кажется, действительно, какая-то однобайтовая семибитная кодировка. Возможно, при установке NLS_LANG библиотека stdio (как я понял, она подразумевалась в одном из ответов) начинает медленнее обрабатывать данные в Unicode и общая скорость обработки и записи падает. Было бы, наверное, неплохо иметь в sqlplus режим, в котором данные берутся как есть, минуя все NLS-преобразования строк, просто "as is".
Отъезд "в провинцию" плохо на тебя повлиял?
Давай по буквам.
1. По умолчанию - US7ASCII. Это объясняет знаки вопроса, но не объясняет падение производительности.
2. stdio - стандартный ввод-вывод. Т.е. имеется ввиду вариант перенаправления стандартного вывода:
sqlplus @script.sql >myfile.txt

3."Минуя NLS-преобразования" - достигается установкой NLS_LANG в значение совпадающее с NLS-параметрами БД
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356658
stdio.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

ютф8 работает на однобайтных символахв 2-2.5 раза медленне фиксированных кодировок.
Это касается и перенаправления и спула и утл_файл в текстовом режиме.
Это касается и банального cat.
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356850
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous1. По умолчанию - US7ASCII. Это объясняет знаки вопроса, но не объясняет падение производительности.
2. stdio - стандартный ввод-вывод. Т.е. имеется ввиду вариант перенаправления стандартного вывода:
sqlplus @script.sql >myfile.txt
ok, хорошо

andrey_anonymous3."Минуя NLS-преобразования" - достигается установкой NLS_LANG в значение совпадающее с NLS-параметрами БД

Судя по тестам, перекодировка сама по себе (внутри базы) влияет на время выгрузки в пределах стат. погрешности, т.е. почти никак. Даже если по умолчанию постоянно идет перекодировка из AL32UTF8 в AL32UTF8 (хотя, наверное, такого действительно не происходит) - это почти не отличается по времени работы от ситуации с полным отсутствием перекодировки. Т.е. тут тормоза не внутри базы.

Кстати, попробовал UTL_FILE, скорость выгрузки достигает ~7-8 Mb/сек. Т.е. гораздо эффективнее, чем sqlplus.
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39356880
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stdio.andrey_anonymous,
ютф8 работает на однобайтных символахв 2-2.5 раза медленне фиксированных кодировок.
Илья меряет мегабайты/с, а не символы.
Увеличение времени за счет увеличения объема было бы понятно, но тут заявлено физическое падение RAW скорости.
Непонятно.
Я бы потрассировал - посмотрел бы, чем оно по факту занимается, и влияет ли на это активная локаль.
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39357684
аналогичный баг под многобайтной кодирофкой и trimspool on
"лечилось" корректным выбором однобайтной страницы/и/или выключением trimspool
...
Рейтинг: 0 / 0
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
    #39357804
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousstdio.andrey_anonymous,
ютф8 работает на однобайтных символахв 2-2.5 раза медленне фиксированных кодировок.
Илья меряет мегабайты/с, а не символы.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
~> for ((i=1;i<1000000;i++)); do echo 123;done > 1.1
~> export LC_ALL=C
~> time wc 1.1
 999999  999999 3999996 1.1

real	0m0.057s
user	0m0.024s
sys	0m0.000s
~> export LC_ALL=en_US.utf8
~> time wc 1.1
 999999  999999 3999996 1.1

real	0m0.139s
user	0m0.072s
sys	0m0.000s
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]