[ОТВЕТИТЬ]
Опции темы
18.01.2007 07:19  
vasiliy
Установлен оракл под windows. С некоторых пор, число сессий oracle периодически становится более 240, при этом начинает появляться ошибка ora-012500.

Сервер
платформа интел, двухпроцессорный с гипертрейдингом
памяти 4ГБ
10 дисков собраны в 5 зеркал на srcu42x
Oracle 8.1.6
ОС Windows STD Edition, используется ключи /3GB /USERVA=3030 /PAE

Работают 29 клиентов супермага, остальные сессии занимаются различными нашими отчетами.
Можно ли что либо сделать для нормальной работы бд ?
 
18.01.2007 07:22  
Mtirt
Настройки и версия Oracle ?

И сколько пользователей?
 
18.01.2007 07:23  
vasiliy
не указал версию ос - windows 2000 std edition.
 
18.01.2007 07:45  
vasiliy
ошибка возникает при кол-ве сессий от 230 примерно
init.ora выглядит так

db_files = 1024
control_files = "I:\oradata\KOZHEMCO\control02.ctl"
control_files = "E:\OracleBase\Products\ora8i16\oradata\CO\control01.ctl"
open_cursors = 100
max_enabled_roles = 30
db_block_buffers = 300000
USE_INDIRECT_DATA_BUFFERS = TRUE
db_block_size = 8192
shared_pool_size = 300000000
shared_pool_reserved_size = 20000000
large_pool_size = 614400
java_pool_size = 0
log_archive_start = true
log_archive_format = "arc%s.%T"
log_archive_dest_1 = "LOCATION=F:\archivelog"
processes = 500
parallel_max_servers = 2
log_buffer = 12288000
max_dump_file_size = 10240
global_names = true
oracle_trace_collection_name = ""
background_dump_dest = E:\OracleBase\Products\ora8i16\admin\CO\bdump
user_dump_dest = E:\OracleBase\Products\ora8i16\admin\CO\udump
remote_login_passwordfile = exclusive
os_authent_prefix = ""
compatible = 8.1.0
sort_area_size = 245760
sort_area_retained_size = 65536
rollback_segments = (RBS01,RBS02,RBS03,RBS04,RBS05,RBS06,RBS07,RBS08,RBS09,RBS10,RBS11,RBS12)
job_queue_processes = 3
_db_handles_cached = 0
_SQLEXEC_PROGRESSION_COST=0
 
18.01.2007 08:37  
kadr
по всем признакам похоже на нехватку ресурсов (а именно памяти) для создания новой сессии

Лирическое отступление:
Не совсем понятно как увязывается
Цитата:
памяти 4ГБ
и
Цитата:
db_block_buffers = 300000
USE_INDIRECT_DATA_BUFFERS = TRUE
db_block_size = 8192
 
18.01.2007 08:52  
vasiliy
без USE_INDIRECT_DATA_BUFFERS база не стартует с таким количеством db_block_buffers,
а с меньшим кол-вом соотв-но не хавает больше 2-х гигов
 
18.01.2007 09:31  
OlegON
Все таки, 4Гб этот предел, когда еще не всегда стОит пользоваться расширениями памяти. Если бы больше... Смутило, что Windows Standart Edition, там не все красиво, /PAE не работает, скорее всего работает только /3Gb. Это раз, во-вторых, в алерте больше ничего не написано? И в третьих, действительно нехватка ресурсов, 2,5Гб из 3х отдал под буфера... Послабее аппетиты надо иметь на таких машинках :)
Вдогонку, compatible = 8.1.6
 
18.01.2007 15:52  
akonev
/userva тоже не работает. он только в 2003 появился.
2.5Г под буферами да еще 300М под шарапулом. больше никому ничего и не хватает. пинай ораклистов ваших.
спросил, как обещал: доходило до 500 и более сессий без потери работоспособности
 
18.01.2007 16:18  
OlegON
Да, я даже и не заметил спросонья, а скажите, откуда вообще рекомендация использования /USERVA такого размера в применении к Ораклу?

отсюда

Oracle + 32bit Windows
Использование больших объемов оперативной памяти

Симптомы

- ORA-12500 / TNS-12500
- TNS:listener failed to start a dedicated server process
- ORA-12540 / TNS-12540 TNS:internal limit restriction exceeded
- NT-8 Not enough storage is available to process this command
- skgpspawn failed:category = ....
- ORA-27142 could not create new process
- ORA-27143 OS system call failure
- ORA-4030 out of process memory when trying to allocate ....


Диагноз
Как известно, в Windows экземпляр Oracle выполняется как единый процесс, все внутренние процессы которого выполняются в виде нитей внутри одного процесса oracle.exe. Соответственно, объем адресуемой памяти ограничен для экземпляра 2-мя гигабайтами в стандартной конфигурации на 32-битной платформе.

Лечение
1. Заставить Windows отдать процессам 3Гб (т.н. 4G Tuning).
Условия:

- ОС: Windows Server 2003, Windows 2000 AS/DS, Windows NT 4.0 EE;
- Oracle: EE/SE от 7.3 и выше;
- Памяти на сервере должно быть установлено 4 гигабайта и более.


Если вышеперечисленные условия удовлетворяются, добавляем в boot.ini ключ /3GB. После перезагрузки память, доступная Oracle, должна увеличиться (в теории) до 3 гигабайт. На практике удавалось достичь только 2,7 гигабайта. При этом никаких дополнительных настроек в экземпляре Oracle выполнять не нужно – разве только пересмотреть параметры БД, управляющие выделением структур в памяти, в большую сторону.

При установленном свиче /3GB в кластерной конфигурации периодически может появляться ошибка:

ORA-00603: ORACLE server session terminated by fatal error
ORA-27501: IPC error creating a port
ORA-27300: OS system dependent operation:IPC_CreateNamedSocket failed with status: 10013
ORA-27301: OS failure message: An attempt was made to access a socket in a way forbidden by its access permiss
ORA-27302: failure occurred at: initport_1


, связанная с нехваткой ресурсов у ОС (free PTE).
В Windows 2003 это решается увеличением памяти для ОС свичом /USERVA:

/3GB /USERVA=2900

т.е. ОС получит на 172 (3072-2900) мегабайта больше.

2. Использование Address Windowing Extensions (AWE).
Условия:

- ОС: Windows Server 2003 AS/DS, Windows 2000 AS/DS;
- Oracle: EE/SE 8.1.6.x, 8.1.7.x, 9.2.x, 10.1.x;
- Памяти на сервере должно быть установлено более 4 гигабайт.


Если вышеперечисленные условия удовлетворяются, добавляем в boot.ini ключ /PAE. Этот ключ может быть использован совместно с /3GB, но следует помнить, что объем доступной памяти в этом случае будет ограничен 16 гигабайтами. Вся память выше «нижних» 4 гигабайт может быть использована под DB_BLOCK_BUFFERS. Для этого необходимо соответствующим образом настроить экземпляр Oracle:
a) дать учетной записи, под которой запускается сервис экземпляра Oracle привилегию «Lock Pages in Memory» (Local System, под которым запускается сервис по умолчанию, этой привилегией обладает);
b) добавить в реестр (HKLM\Software\Oracle\HomeX) ключ (тип – строковый параметр) размера AWE_WINDOW_MEMORY – окна, сквозь которое будут обрабатываться DB_BLOCK_BUFFERS, вынесенные в «верхнюю» память. Указывается в байтах. Если этот ключ не установлен явно, используется значение по умолчанию 1 гигабайт. Зачастую этот размер достаточен, однако вполне работоспособны и экземпляры с AWE_WINDOW_MEMORY = 0,5 гигабайт;
в версии 9.2.0 существует небольшое изменение по сравнению с предыдущими релизами - Oracle начал проверять минимальный размер окна AWE_WINDOW_MEMORY по формуле:

min(AWE_WINDOW_MEMORY) = (4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8


где значение по умолчанию _DB_BLOCK_LRU_LATCHES = (16*CPU_COUNT)

Рассчитанные минимумы AWE_WINDOW_MEMORY для популярных значений DB_BLOCK_SIZE и CPU_COUNT:

+---------------+-----------+-----------------------------+
| DB_BLOCK_SIZE | CPU_COUNT | MIN(AWE_WINDOW_MEMORY), Mb |
+---------------+-----------+-----------------------------+
8192 2 128
8192 4 256
8192 8 512
8192 16 1024
16384 2 256
16384 4 512
16384 8 1024
16384 16 2048
32768 2 512
32768 4 1024
32768 8 2048
32768 16 4096


c) добавить параметр USE_INDIRECT_DATA_BUFFERS=TRUE в (s)pfile;
следует помнить, что после установки этого параметра в версии 9.2.0.Х теряются следующие возможности:
- использовать разные размеры db_block_size в базе данных и
- использование новых параметров DB%CACHE_SIZE;
d) установить достаточно большой размер DB_BLOCK_BUFFERS (не менее размера AWE_WINDOW_MEMORY) – только он может быть перенесен в «верхнюю память»; максимальное значение вычисляется по формуле:

(RAM - 4GB + AWE_WINDOW_MEMORY)


Для калькуляции размера DB_BLOCK_BUFFERS важно представлять себе как размещаются структуры Oracle в памяти сервера.

Что находится в нижней памяти (1,7 или 2,7 гигабайта в зависимости от установки ключа /3GB в boot.ini):

- AWE_WINDOW_MEMORY
- элементы SGA (shared_pool, large_pool, java_pool, log_buffers)
- Oracle.exe и DLL (65-100M)
- стэк нитей пользовательский процессов (1 мб на нить по умолчанию - можно изменить утилитой orastack.exe)
- PGA пользовательских сессий


Очень важно правильно выставить значение AWE_WINDOW_MEMORY.
При недостаточном размере процесс DBWR может потреблять до 100% процессорного времени. С версии 9.2.0.Х это легко проверяется запросом:

select * from v$sysstat where statistic# in (154, 155);

где: 154 – number of map operations
155 – number of map misses

Если значение number of map misses относительно велико либо постоянно увеличивается – необходимо увеличивать AWE_WINDOW_MEMORY.

В версии 8i необходимо следить за потреблением процессорного времени процессом DBWR.
Изображения
Тип файла: jpg Валера__выступление.jpg (103.6 Кб, 2100 просмотров)
Тип файла: jpg Валера__выступление.jpg (103.6 Кб, 2100 просмотров)
 
18.01.2007 23:30  
akonev
О! А вот про это я забыл:
Цитата:
Сообщение от olegon
1. Заставить Windows отдать процессам 3Гб (т.н. 4G Tuning).
Условия:
- ОС: Windows Server 2003, Windows 2000 AS/DS, Windows NT 4.0 EE;
windows 2000 std edition очень своеобразно отрабатывает /3GB
у привилегированного режима (ядра) гиг отбирает, а непривелигированному (приложениям) НЕ отдает.
так что у тебя остается 1гиг на систему и 2 на оракл.

получается:
1) срочно менять систему на 2000 AS/DS или 2003 EE/DE
2) пинать ораклистов
 
 
Опции темы



Часовой пояс GMT +3, время: 14:43.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.