Através da consulta abaixo podemos ter as consultas que estao mais demoradas.
select sql_text, elapsed_time/1000000 elapsed_sec, executions, disk_reads, buffer_gets
from v$sqlarea
order by elapsed_time desc;
Através da consulta abaixo podemos ter as consultas que estao mais demoradas.
select sql_text, elapsed_time/1000000 elapsed_sec, executions, disk_reads, buffer_gets
from v$sqlarea
order by elapsed_time desc;
No arquivo de configuração httpd.conf existem vários parametros dentre eles podemos destacar os parametros:
No UNIX e Linux:
StartServers
MaxClients
MaxSpareServers / MinSpareServers
MaxRequestsPerChild
No Windows NT:
ThreadsPerChild
Em todos os sistemas operacionais:
KeepAlive
KeepAliveTimeout
MaxKeepAliveRequests
Para cada um deles, os parametros adequados são:
StartServers: configura o numero de processos filhos criados quando o Oracle HTTP Server é iniciado. O default é 5.
MaxClients: Limits the number of requests that are handled simultaneously. The default value is 150.
MaxRequestsPerChild: Each child version handles this number of requests and then dies. If the value is 0, the process lasts until the machine is rebooted. The default value is 30.
MaxSpareServers: No more than this number of child servers should be left running and unused. The default value is 10.
MinSpareServers: At least this number of child servers should be kept functional. The default value is 5. If fewer than this number exist, new ones are started at an increasing rate each second until the rate defined by MAX_SPAWN_RATE is reached (default: 32).
For example, if the number of requests to be handled simultaneously is 100, and the number of child server processes created is 10, then the maximum number of requests to be handled per child can be 10
Dicas interessantes sobre o OHS
ThreadsPerChild: This directive sets the number of threads created by each child process. The child creates these threads at startup and never creates more.
If you are using an MPM like mpm_winnt, where there is only one child process, this number should be high enough to handle the entire load of the server.
If you are using an MPM like mpm_worker, where there are multiple child processes, the total number of threads should be high enough to handle the common load on the server.
MinSpareThreads: This value is only used with mpm_worker. Since Oracle Access Manager plug-in initialization is deferred until the first request, there is minimal advantage of keeping high value for this directive.
However, it is useful to keep this parameter as high as possible.
MaxSpareThreads: This value is only used with mpm_worker. The value for MaxSpareThreads must be greater than or equal to the sum of MinSpareThreads and ThreadsPerChild or the Apache HTTP Server automatically corrects it.
Recommendation: Keep the value high. For a dedicated server this will not be a problem.
MaxSpareServers: With Apache v2, this is used only with the prefork MPM model. To preserve as much state as possible in the server, set the MaxSpareServers to a high value. Setting this value to the maximum of 255 keeps all Apache worker-processes available indefinitely, but it does not provide an opportunity for worker-process recycling during low-load periods.
MinSpareServers: With Apache v2, this is used only with the prefork MPM model. Since Oracle Access Manager plug-in initialization is deferred until the first request, using a high value for the MinSpareServers parameter provides minimal advantage.
However, it is useful to keep this parameter as high as possible. For dedicated Web server systems, this should pose no great burden.
MaxClients: With IHS v2 and the worker MPM, MaxClients restricts the total number of threads that will be available to serve clients.
For hybrid MPMs, the default value is 16 (ServerLimit) multiplied by a value of 25 (ThreadsPerChild). To increase MaxClients to a value that requires more than 16 processes, you must also raise ServerLimit.
Os valores abaixo sao os recomendados para a maioria dos sites:
Recommended values that are sufficient for most sites:
MinSpareServers 5
MaxSpareServers 10
StartServers 5
Na grande maioria das instalacoes a recomendaçao é definir keepalive como OFF
KeepAlive OFF
Apache
O apache é um velho conhecido como servidor de paginas html. A oracle adicional ele ao aplication server – OAS a partir da versao 9i e então o batizou de OHS. Isso porque, o apache permite adicionar módulos para que com isso ele possa não somente hospedar paginas em html, mas paginas com conteudo dinamico, e muitas outas funcionalidades. São exemplos de módulos presentes no OHS – Oracle Http Server (bacana não?).
Pagina do Apache: http://www.apache.org/docs/mod/index.html
mod_dms: Monitorar o performance de sites com o oracle DMS – dinamyc monitoring service.
mod_oc4j: Envia as requisicoes do Oracle HTTP Server para Oracle Application Server Containers for J2EE (OC4J).
mod_php: Oracle Application Server 10g suporta PHP na sua versão 4.3 (php-4.3.4).
mod_oradav: Esse é legal. Imagina voce em casa pode baixar os documentos do word e salva-los na pasta do servidor, isso tudo usando o plugin do browser que reconhece um arquivo do word no ato da sua abertura pelo link, e depois é só salva-lo normalmente que este arquivo estará salvo no servidor. Muito legal, usado pelo oracle Portal para publicacao de conteudo. Bom pelo menos deveria mas o povo nao conhece essa funcionalidade e nao tira proveito. Pena.
mod_ossl: Habilita criptografia no Oracle HTTP Server
mod_osso: Faz o controle de login unico chamado de single sign on, ou SSO.
mod_plsql: Aplicacoes desenvolvidas em PLSQL podem ser acessadas através do Oracle HTTP Server para um PL/SQL Gateway.
mod_security: É uma engine que serve de escudo para proteger aplicacoes web.
A memória compartilhada e os semáforos são dois itens importantes, sem eles a instancia nao inicia e em consequencia o banco de dados nao abrirá.
Memória compartilhada
Assim: Memória compartilhada como o nome mesmo diz, é o local de memória onde ela pode ser compartilhada entre diferentes processos. O oracle utiliza essa area de memoria para a implementar a SGA (System Global Area), da qual precisa estar visivel para todas as sessoes de banco de dados. Por isso as vezes o administrador apesar de ter memória disponivel nao consegue alocar uma SGA maior, necessita configurar os parametros de memoria para que a SGA vá até estes limites impostos pelo sistema operacional.
Um erro comum por exemplo no banco postgree por falta de memroia compartilhada é:
Out of Memory: Killed process 12345 (postmaster).
A partir do kernel 2.6, opadrão é que não haja “sobre-utilização”. Caso esteja desativado, pode ser implementado selecionando um modo restrito de sobre-utilização através do sysctl:
[root]# sysctl -w vm.overcommit_memory=2
Aproveitando o espaço, e como estava com as definições em mãos, segue descritivo referencia para facilitar a configuração (quando necessário) desses parâmetros:
Tamanho máximo de um segmento de memória compartilhada (bytes). 250 kB + 8.2 kB * shared_buffers + 14.2 kB * max_connections até o infinito.
Tamanho mínimo de um segmento de memória compartilhada (bytes). Padrão 1.
Quantidade total de memória compartilhada disponível (bytes ou páginas)
Número máximo de segmentos de memória compartilhada por processo. Somente 1 segmento é necessário, mas o padrão é muito maior.
Número máximo de segmentos de memória compartilhada para todo o sistema.
Semáforos
Os semáforos sao sinais que podem estar ligados ou desligados indicando que este processo ainda nao finalizou sua tarefa. Veja, os semaforos existem para que nao sejam sobrepostas as operações executadas pelos processos. Imagina a copia em paralelo de um arquivo do arquivo do word se os dois ao mesmo tempo serem gravados no mesmo local com mesmo nome o que ocorrerá ? Existe ai um conflito para utilizacao do nome do arquivo, do espaço em disco, portanto um semaforo resolveria essa questao sinalizando um processo para que ele aguarde ate que o outro termine a sua operação. Um processo pode ter uma sinalização de ligado ou desligado, isso na verdade servirá como uma forma de controle de eventos e processos para que a SGA do Oracle consiga controlar toda a concorrencia de escrita e leitura na memoria compartilhada.
Verificação de instalação:
Inicie sua jornada usando o comando abaixo:
[root]# ipcs -la
----- Limites da memória compartilhada ----------
número máximo de segmentos: 4096
tamanho máximo do segmento (Kb): 2097152
memória compartilhada total máxima (Kb): 8388608
tamanho mínimo do segmento (bytes): 1
------ Limites de semáforo ----------------------
número máximo de arrays: 100
máximo de semáforos por array: 100
máximo geral de semáforos do sistema: 32000
máximo de ops por chamada semop: 100
valor máximo de semáforo: 32767
------ Mensagens: limites -----------------------
número máximo geral de filas no sistema: 16
tamanho máximo da mensagem (bytes): 8192
tamanho máximo padrão da fila (bytes): 16384
Para o Oracle 10G, estes valores podem variar de acordo com release e versão:
echo 100 32000 100 100 > /proc/sys/kernel/sem
Depois confirme com o comando cat:
cat /proc/sys/kernel/sem
Precisamos também aumentar o numero máximo de arquivos manipulados pelo usuário, para 131072:
echo 131072 > /proc/sys/fs/file-max
ulimit -n 131072
Aumentar as portas disponiveis no servidor:
echo 1024 65000 > /prco/sys/net/ipv4/ip_local_port_range
Aumentar o numero máximo de processos que podem ser controlados pelo usuario, para 16384.
com o ulimit -a voce consegue verificar como o seu sistema esta atualmente.
ulimit -u 16384
Alterar diretamente no parametro do kernel, veja essa mudanca nao é permanente.
echo 65536 > /proc/sys/fs/file-max
Essa agora sim, a cada boot é lido novamente o arquivo sysctl.conf, se quiser confira os demais parametros editando o arquivo sysctl.conf com o vi.
echo fs.file-max=65536 >> /etc/sysctl.conf
E depois o numero de processos controlados pelo usuario oracle no servidor.
Eu aconselho colocar esse comando no profile comum que fica em /etc/profile.sh ou no bash_profile do usuario. Outra dica é colocar no arquivo /etc/security/limits.conf
ficando assim:
oracle soft nofile 63536
oracle hard nofile 63536
Duas dicas interessantes:
NOTE: It is also possible to query the current usage of file handles using the following command:
# cat /proc/sys/fs/file-nr
1140 0 103062
In the above example output, here is an explanation of the three values from the file-nr command:
* Total number of allocated file handles.
* Total number of file handles currently being used.
* Maximum number of file handles that can be allocated. This is essentially the value of file-max – (see above).
NOTE: If you need to increase the value in /proc/sys/fs/file-max, then make sure that the ulimit is set properly. Usually for 2.4.20 it is set to unlimited. Verify the ulimit setting my issuing the ulimit command:
# ulimit
unlimited
Lembre-se o comportamento tanto da manipulação dos arquivos quanto dos processos pode ser diferente quanto ao metodo de login, portanto SSH, login via terminal poderão ter limites diferentes.
Confirme tudo com o comando
sysctl -p
ou ainda para confirmar os arquivos separadamente, ou seja nao precisa de boot:
sysctl -w fs.file-max=65536
Bom, de tudo eu li a informação no site do puschitz também, mas ta confuso visto que ele mexe no mesmo parametro duas vezes no mesmo arquivo /etc/security/limits.conf tanto para o numero de processos quanto para o numero de arquivos.
Veja em http://www.puschitz.com/TuningLinuxForOracle.shtml
Resumo – Execute os comandos como root:
echo “kernel.sem=250 32000 100 128” >> /etc/sysctl.conf
Instalação: Itens de verificação.
Temos que verificar alguns itens do sistema operacional seja linux ou windows, o espaço livre em disco e a memória como o quadro a seguir:
O importante é verificar que cada componente tem o seu consumo de memória mínimo. Não se pode esquecer a memória para ser usada pela interface gráfica do sistema operacional e demais processos de segundo plano. Portanto, antes de tudo 1 giga a mais sempre !
Outras verificações como CPU, Kernel, update do sistema:
Verificar o espaço livre disponível:
Precisamos também configurar as variaveis de ambiente:
TMP
DISPLAY
Já a variavel ORACLE_HOME e ORACLE_SID deverá ser removida durante a instalação podendo ser reconfigurada após o produto instalado.
ex:
export TMP=/tmp
export DISPLAY=localhost:0.0
unset ORACLE_SID
unset ORACLE_HOME
O arquivo hosts deverá ter o seu cabecalho original ou seja o texto que ja estava nele deverá ser conservado principalmente a linha que contêm a instrução localhost, porque o software do sistema operacional necessita dessa informação para roteamento interno dos processos no servidor.
Assim, adicione a linha contendo as informações sobre o IP e apelido da maquina:
192.168.10.1 myappsrv.mycompany.com myappsrv
As portas podem ser definidas no ato da instalação, se quiser alterar as portas neste momento é muito fácil. Basta procurar no CD de instalação, obviamente voce devera copiar o cd para o servidor né, e alterar as informações contidas no arquivo staticports.ini
Para usar o dcmctl teremos que incluir a pasta, ORACLE_HOME/dcm/bin na variavel PATH e com ele podemos:
Podemos também, para fins de criação de novos scripts chamar o dcmctl a partir de um modo em lote.
dcmctl shell -f scriptdcm.dcm
Conteudo do arquivo scriptdcm.dcm:
createcomponent -ct oc4j -co oc4j_novo
É uma framework que habilita o administrador a gerenciar todas as configurações dos servidores de aplicações da oracle.
Com o DCM podemos:
o DCM é implementada pelo processo DCM e tem duas interfaces:
O DCM ainda é associado a dois tipos de plug-ins:
O DCM contém um repositorio que pode ser armazenado em arquivos, ou no banco de dados de metadados. Logicamente, podemos fazer uma copia de seguranca de tempos em tempos em arquivos a partir do dcmctl. O acesso ao repositorio é sempre feito pelo dcmctl, onde a localização dos arquivos fica em: ORACLE_HOME/dcm/repository
Os arquivos do repositorio são descritos a seguir:
Interromper o application server control
emctl stop iasconsole
Para se obter uma lista dos componentes:
opmnctl status
Interromper os processos dos componentes separadamente, não interrompe o opmn.
opmnctl stopproc process-type=nomedocompoente
Interromper todos os processos dos componentes de uma vez incluindo o opmn.
opmnctl stopall
Ou ainda utilize ou customize o script que está presente na pasta ORACLE_HOME/bin
$ORACLE_HOME/bin/runstartupconsole.sh stop all
Os processos acima, devem ser repetidos na infra estrutura e em cada camada intermediaria – middle.
Interromper o banco de metadados
sqlplus /nolog
SQL> connect username/password as sysdba
SQL> shutdown immediate
SQL> exit
Interromper o listener
lsnrctl start
O opmnctl é um comando de linha para o OPMN. Utilize sempre o Application Server Control ou o comando de linha, opmn para iniciar e parar os processos do OAS.
Exemplos de comandos opmn:
O opmn se encontra na pasta ORACLE_HOME/opmn/bin lembre-se de adicionar este caminho a sua variavel de ambiente PATH.
export PATH=$PATH:$ORACLE_HOME/opmn/bin
O OPMN é um gerenciador de processos que centraliza certas operações sobre os demais processos do servidor de aplicação. O OPMN gerencia todos os compontentes do servidor de aplicacao, com exceção do repositório de metadados.
O OPMN é composto por:
O PM usa o ONS para: