Undesirable Global Cache Statistics
The following are undesirable statistics, or statistics for which the values should always be zero or near-zero.
global cache blocks lost--This statistic reveals any block losses during transfers and high values may indicate network problems. When using an unreliable IPC protocol such as UDP, the value for 'global cache blocks lost' may be non-zero. If this is the case, then the ratio of 'global cache blocks lost' divided by 'global cache current blocks served' plus 'global cache cr blocks served' should be as small as possible. A non-zero value for 'global cache blocks lost' does not necessarily indicate a problem, because Oracle retries the block transfer operation until it is successful. Unlike TCP/IP, UDP/IP is considered unreliable because UDP/IP provides very few error recovery services.
global cache blocks corrupt--This statistic indicates whether any blocks were corrupted during transfers. High values for this statistic indicate an IPC, network, or hardware problem. "
"The Global Cache Blocks Lost Oracle metric event test checks whether a global cache request did not complete due to a timeout. A timeout is caused either by a network communication error or by a high system load."
Blog with ORACLE related posts (mainly PL/SQL programming) and some personal thoughts
Blog com artigos sobre ORACLE (principalmente sobre programação PL/SQL) e alguns pensamentos pessoais.
2006-11-29
2006-11-21
UNION
Já deve ser conhecido mas como é bastante importante do ponto de vista de optimização aqui vai.
select a, b from t1
union all
select c, d from t2
UNION ALL - não elimina duplicados, pelo que é mais rápido que UNION (que elimina os duplicados).
select a, b from t1
union
select c, d from t2
se se pertender eliminar duplicados em cada uma das parte de um union all mas não na união final usar por exemplo o DISTINCT
select distinct a, b from t1
union all
select distinct c, d from t2
regra: Se se souber se antemão que não vamos ter duplicados, ou não é importante eliminar duplicados usar UNION ALL.
select a, b from t1
union all
select c, d from t2
UNION ALL - não elimina duplicados, pelo que é mais rápido que UNION (que elimina os duplicados).
select a, b from t1
union
select c, d from t2
se se pertender eliminar duplicados em cada uma das parte de um union all mas não na união final usar por exemplo o DISTINCT
select distinct a, b from t1
union all
select distinct c, d from t2
regra: Se se souber se antemão que não vamos ter duplicados, ou não é importante eliminar duplicados usar UNION ALL.
Categorias / Labels:
Oracle Blues,
Oracle DB
2006-11-17
Coisas novas previstas para a Oracle 11g
Algumas coisas novas previstas na 11g que vão dar um jeitão:
- updates da base de dados (patchs, e upgrades) em RAC sem downtime!
- possibilidade de usar sequencias sem utilizacao da tabela dual (sequence.nextval).
- cache de resultados de SQL e de PL/SQL ( /*+result_cache*/ )
- Fine Grained Dependancy Tracking - quando se altera uma tabela/procedimento (por exemplo uma nova coluna) não vai invalidar todos os objectos relacionados
- Os DML triggers são mais rápidos e poder-se-á estipular uma ordem de corrida. Poder-se-á mesmo ter triggers que são ao mesmo tempo before after row e statement.
- Novo tipo : SIMPLE_INTEGER mais rápido que o PLS_INTEGER e não pode ser nulo.
- UTL_SMTP, UTL_TCP e UTL_HTTP com implementação de segurança: ainda estou para ver o que isto é exactamente.
- CONTINUE keyword para os loops.
- Oracle Audit Vault - Segurança de dados
- um objecto pode agora estar "disable" e não somente "enabled" e "invalid"
- operações em LOBs mais rápidas - espero bem que sim!!
- Colunas Virtuais - coluns que na realidade são o resultado de funções
create table t (col1 number, col2 number, soma as (c1+c2) virtual;
- updates da base de dados (patchs, e upgrades) em RAC sem downtime!
- possibilidade de usar sequencias sem utilizacao da tabela dual (sequence.nextval).
- cache de resultados de SQL e de PL/SQL ( /*+result_cache*/ )
- Fine Grained Dependancy Tracking - quando se altera uma tabela/procedimento (por exemplo uma nova coluna) não vai invalidar todos os objectos relacionados
- Os DML triggers são mais rápidos e poder-se-á estipular uma ordem de corrida. Poder-se-á mesmo ter triggers que são ao mesmo tempo before after row e statement.
- Novo tipo : SIMPLE_INTEGER mais rápido que o PLS_INTEGER e não pode ser nulo.
- UTL_SMTP, UTL_TCP e UTL_HTTP com implementação de segurança: ainda estou para ver o que isto é exactamente.
- CONTINUE keyword para os loops.
- Oracle Audit Vault - Segurança de dados
- um objecto pode agora estar "disable" e não somente "enabled" e "invalid"
- operações em LOBs mais rápidas - espero bem que sim!!
- Colunas Virtuais - coluns que na realidade são o resultado de funções
create table t (col1 number, col2 number, soma as (c1+c2) virtual;
Categorias / Labels:
Oracle Blues,
Oracle DB
2006-11-16
Escrever no alert log
Para escrever no alert log as tuas msg proprias
dbms_system.ksdwrt(2,'A line of text para o alert log');
Tem de se ter permissão de execute do package
se se usar 1 em vez do 2 vai para o trace file e se se usar 3 vai para os dois :-)
dbms_system.ksdwrt(1,'A line of text para o trace file');
dbms_system.ksdwrt(3,'A line of text para o trace file e para o alert log');
dbms_system.ksdwrt(2,'A line of text para o alert log');
Tem de se ter permissão de execute do package
se se usar 1 em vez do 2 vai para o trace file e se se usar 3 vai para os dois :-)
dbms_system.ksdwrt(1,'A line of text para o trace file');
dbms_system.ksdwrt(3,'A line of text para o trace file e para o alert log');
Categorias / Labels:
Oracle Blues,
Oracle DB
2006-11-15
NULLs nos COUNT
Os nulos não são contados se for especificado a coluna num count!
Então: com COUNT usar sempre (*) or uma coluna da PK
SELECT COUNT (*) FROM A;
COUNT(*)
----------
10
SELECT COUNT (OBS) FROM A;
COUNT(A)
-----------
3
SELECT COUNT (*) FROM A WHERE OBS IS NULL;
COUNT(*)
----------
7
"If you specify 'expr' then COUNT returns the number of rows where 'expr' is not null." -- Oracle SQL Reference
Então: com COUNT usar sempre (*) or uma coluna da PK
SELECT COUNT (*) FROM A;
COUNT(*)
----------
10
SELECT COUNT (OBS) FROM A;
COUNT(A)
-----------
3
SELECT COUNT (*) FROM A WHERE OBS IS NULL;
COUNT(*)
----------
7
"If you specify 'expr' then COUNT returns the number of rows where 'expr' is not null." -- Oracle SQL Reference
Categorias / Labels:
Oracle Blues,
Oracle DB
A saber para optimizar
Passar parametros com IN OUT com NOCOPY -> passa por referencia (por ponteiro) => mais rápido e deve ser obrigatório para passagem de CLOBs, BLOBs! Problema: se o procedimento/função der excepção o valor é mesmo assim modificado!
Assim o processo normal de um IN OUT é que a variavel só é alterada no final da execução (sem raise de excepção) do programa.
No IN não é usado NOCOPY porque já é isso que é efectuado.
usar DETERMINISTIC numa função significa que o seu resultado é igual para o mesmo input => permite o uso de cache
exemplo? uma função de retorna TRUE/FALSE se um dado número inteiro é par ou não: function isPar(x integer) return boolean determinist;
Assim o processo normal de um IN OUT é que a variavel só é alterada no final da execução (sem raise de excepção) do programa.
No IN não é usado NOCOPY porque já é isso que é efectuado.
usar DETERMINISTIC numa função significa que o seu resultado é igual para o mesmo input => permite o uso de cache
exemplo? uma função de retorna TRUE/FALSE se um dado número inteiro é par ou não: function isPar(x integer) return boolean determinist;
Categorias / Labels:
Oracle Blues,
PL/SQL
O que aprendi hoje /What I learned today
Lendo problemas e descobertas de outros ajuda-nos muitas vezes a perceber o que fizemos de errado e conhecer algumas coisas peculiares.
Reading problems and finding of others help us realize what we did wrong and to find some peculiar stuff.
Try this code:
Reading problems and finding of others help us realize what we did wrong and to find some peculiar stuff.
Try this code:
Categorias / Labels:
Bilingue,
Oracle Blues,
PL/SQL,
Tradução
Tom Kyte Mantra
From his Blog :-)
--
--
"You should do it in a single SQL statement if at all possible.
If you cannot do it in a single SQL Statement, then do it in PL/SQL.
If you cannot do it in PL/SQL, try a Java Stored Procedure.
If you cannot do it in Java, do it in a C external procedure.
If you cannot do it in a C external routine, you might want to seriously think about why it is you need to do it…"
Categorias / Labels:
Oracle Blues,
PL/SQL
Vida, oh Vida!
Hoje a rádio teve o prazer de relembrar uma canção anglo-saxonica completamente estúpida, mas que teve sucesso em portugal.
Se fosse em português ninguém ouviria isto!
Talvez se fosse o João Pedro Pais ouvissem , pois ele também tem canções sem nexo!
Os meus amigos já me ouviram vezes sem conta gozar com está canção.
Se fosse em português ninguém ouviria isto!
Talvez se fosse o João Pedro Pais ouvissem , pois ele também tem canções sem nexo!
Os meus amigos já me ouviram vezes sem conta gozar com está canção.
How do you explain to that to a kid?
Desculpem lá não ter traduzido
----
----
A teacher in junior school somewhere... asked the children what was the occupation of their parents
Teacher: George, how old are you?
George : i am 7 years old, miss
Teacher: ..and what is the occupation of your father?
George : he is a dentist, miss
Teacher: ... and what is the occupation of your mother?
George : She is a lawyer, miss
Teacher: Excellent, George.
Teacher kept asking the children, when it was the time for little Susan to answer her teacher's question.
Susan looked a little scaried.
Teacher: And you little Susan
Susan : Yes miss
Teacher: What is the occupation of your father?
Susan : well...
Teacher: ?
Susan : ..he.. he.. he is..
Teacher: ???
Susan : He is working in the post office, delivering mail..
Teacher: Come on Susan, we must be proud of our parent's job. You there little Nick, what's your father's occupation?
Nick stood up, full of pride and replied :
- My father is a pianist in a brothel, miss
Categorias / Labels:
Oracle Blues,
Pessoal,
Rir
Subscribe to:
Posts (Atom)