|
|
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
Добрый день! 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... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 19:18 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
Деев И.Как объяснить такое радикальное падение скорости?stdio ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 19:37 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
Рекомендую выгрузку через UTL_FILE, там будет с обычной скоростью записи на диск (плюс обработка PL/SQL потрохов, конечно), последний раз пробовал в 2013м году на оракле 10-ке, было порядка 10 Мбайт/с. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 19:37 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
Илья, ты же с termout off trimspool on работаешь + array_size установил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 00:06 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
dmdmdmРекомендую выгрузку через UTL_FILE, там будет с обычной скоростью записи на диск (плюс обработка PL/SQL потрохов, конечно), последний раз пробовал в 2013м году на оракле 10-ке, было порядка 10 Мбайт/с.Как правило, медленнее, чем SPOOL из sqlplus на сервере 2ТС Ну как бы в юникодице и количество байт для записи больше А если поставить однобайтную русскую кодировку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 02:13 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
Сегодня как раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 09:11 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
Спасибо ответившим! Сегодня как раз попробую варианты - раньше тоже, бывало, использовал 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; Предстоит миграция довольно значительного объема данных, отсюда и заморочки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 09:37 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
Деев И.По дефолту сейчас в окружении не задается 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-параметрами БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 10:40 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, ютф8 работает на однобайтных символахв 2-2.5 раза медленне фиксированных кодировок. Это касается и перенаправления и спула и утл_файл в текстовом режиме. Это касается и банального cat. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 11:30 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 14:15 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
stdio.andrey_anonymous, ютф8 работает на однобайтных символахв 2-2.5 раза медленне фиксированных кодировок. Илья меряет мегабайты/с, а не символы. Увеличение времени за счет увеличения объема было бы понятно, но тут заявлено физическое падение RAW скорости. Непонятно. Я бы потрассировал - посмотрел бы, чем оно по факту занимается, и влияет ли на это активная локаль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 14:41 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
аналогичный баг под многобайтной кодирофкой и trimspool on "лечилось" корректным выбором однобайтной страницы/и/или выключением trimspool ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 14:42 |
|
||
|
Сильное замедление работы sqlplus на Linux при установке переменной окружения NLS_LANG
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousstdio.andrey_anonymous, ютф8 работает на однобайтных символахв 2-2.5 раза медленне фиксированных кодировок. Илья меряет мегабайты/с, а не символы. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 16:45 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39356658&tid=1886917]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 348ms |

| 0 / 0 |
