RES: [oracle_br] Re: Consulta SQL

2016-10-21 Por tôpico 'Carlos Henrique' carl_oracle...@yahoo.com.br [oracle_br]
Obrigado Chiappa, eu tinha visto alguns dos links que vc informou.

Vou fazer as verificações.

 

Novamente, obrigado.

 

Carlos Henrique

 

De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] 
Enviada em: sexta-feira, 21 de outubro de 2016 16:34
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Re: Consulta SQL

 



Bom, se rodando o SQL fora da aplicação mas conectado no mesmo 
banco/usuário/etc vc obtém o retorno desejado, mas o Exato Mesmo SQL pela 
aplicação falha, tá *** TOTALMENTE COMPROVADO *** que é uma questão FORA DO 
BANCO, então a maioria de nós, especialistas em banco que somos aqui, Não Vamos 
ter como te ajudar O que vc pode fazer aí é :

a. usar os recursos que a tua tool de programação te dê (junto, talvez, com um 
TRACE DE SQL na sessão que ela abre no banco) pra se Certificar que o stack da 
aplicação (ie, drivers, métodos de conexão ao banco, geradores de SQL, etc, 
etc) NÂO estão alterando de forma nenhuma o SQL que vai ser mandado pro banco, 
confirmando que ele está 100% Idêntico ao que roda com sucesso por fora da 
aplicação 

b. dar ** todos ** os detalhes de versão de PHP, webserver, drivers em uso, 
etc, E criar um caso de teste mínimo onde a questão apareça, para que algum 
EVentual progrtamador PHP que passe aqui pelo Fórum possa reproduzir sua issue 
e palpitar em cima

Sobre performance, sim : se o volume de dados for significativo, pode sim ser 
interessante se usar o operador CONTAINS ao invés do LIKE trabalhando em cima 
de um índice de texto - http://www.orafaq.com/node/1918 , 
https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:73326990501799
 e 
http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning
 são exemplos... 

[]s

  Chiappa 








[oracle_br] Re: Consulta SQL

2016-10-21 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Bom, se rodando o SQL fora da aplicação mas conectado no mesmo 
banco/usuário/etc vc obtém o retorno desejado, mas o Exato Mesmo SQL pela 
aplicação falha, tá *** TOTALMENTE COMPROVADO *** que é uma questão FORA DO 
BANCO, então a maioria de nós, especialistas em banco que somos aqui, Não Vamos 
ter como te ajudar O que vc pode fazer aí é :

a. usar os recursos que a tua tool de programação te dê (junto, talvez, com um 
TRACE DE SQL na sessão que ela abre no banco) pra se Certificar que o stack da 
aplicação (ie, drivers, métodos de conexão ao banco, geradores de SQL, etc, 
etc) NÂO estão alterando de forma nenhuma o SQL que vai ser mandado pro banco, 
confirmando que ele está 100% Idêntico ao que roda com sucesso por fora da 
aplicação 

b. dar ** todos ** os detalhes de versão de PHP, webserver, drivers em uso, 
etc, E criar um caso de teste mínimo onde a questão apareça, para que algum 
EVentual progrtamador PHP que passe aqui pelo Fórum possa reproduzir sua issue 
e palpitar em cima

Sobre performance, sim : se o volume de dados for significativo, pode sim ser 
interessante se usar o operador CONTAINS ao invés do LIKE trabalhando em cima 
de um índice de texto - http://www.orafaq.com/node/1918 , 
https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:73326990501799
 e 
http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning
 são exemplos... 

[]s

  Chiappa

[oracle_br] Re: consulta sql em ambiente DW

2013-10-05 Por tôpico ederson2001br
Bom dia Orfeu,

Neste caso, o cenário ficou incompleto e para mostrá-lo todo, seria informação 
demais para postar.

Eu começaria buscando o que a query está fazendo com banco, para em seguida 
identificar o plano de execução.

Para identificar, abra outra sessão na mesma instance enquanto a sua query 
esteja rodando e execute:

--executando.sql
set pagesize 100;
set linesize 160;
column sid format a6;
column serial format a6;
column processo format a60;
column inicio format a20;
column username format a20;
SELECT to_char(s.sid) sid,
   to_char(s.serial#) serial,
   s.username,
   substr(decode(target_desc, NULL, decode(target, NULL, opname, 
concat(opname, concat(' - ', target))), decode(target, NULL,
concat(opname, concat(' : ', target_desc)), concat(opname, concat(' : ',
concat(target_desc, concat(' - ', target)), 1, 55) Processo,
   to_char(start_time, 'dd/mm/ hh24:mi:ss') Inicio,
   totalwork tot_block,
   totalwork - sofar A processar
  FROM v$session_longops l,
   v$session s
 WHERE sofar  totalWork
   AND s.sid = l.sid;

Depois, pegue o plano de execução da sua query original com:

EXPLAIN PLAN FOR
--seu SQL -- 
SET LINESIZE 130
SET PAGESIZE 0
SELECT * FROM table(DBMS_XPLAN.DISPLAY);

Repita o EXPLAIN, mas retirando TODOS os hints e compare os dois.

É um começo ...


Ederson Elias
DBA Oracle
http://br.linkedin.com/pub/ederson-elias/24/8b/8b0

Labor improbus omnia vincit

--- Em oracle_br@yahoogrupos.com.br, orfeu lima orfeuml@... escreveu

 Boa tarde Srs. do grupo,
 Temos um ambiente de dw com as seguintes configurações.
 S. O - Red Hat 5.5
 Oracle 11.2.0.3
 Discos em ASM
 Estou tentando executar o select abaixo, mas não estou conseguindo. A 
 instrução está executando mas não termina.
 Gostaria de pedir sugestão aos membros do grupo para poder estar melhorando 
 essa instrução.
 Índices foram criados.
 Obrigado
 Segue abaixo a instrução sql.
 SELECT 
  /*+ index_join(TBBENEFICIARIO IDXTPSEXO,IDXLOTE,IDXLOTE2) */
  /*+ index_join(TBPROJETO 
 IDXPROJETO,IDXTP_PROJETO,IDX_PROJETO_COMPLEMENTA,IDXSUPER2,IDXPROJMUN) */
  /*+ index_join(TBTIPOPROJETO IDXTPPROJETO) */
  /*+ index_join(TBProjetoTipoFase IDXTPPROJ,IDXTPROJTPFASE) */
  /*+ index_join(TBPROJETOCONSTITUICAO IDXTPROJTPFASE2) */
  /*+ index_join(TBTIPOSEXO IDXTPSEXO2) */
  /*+ index_join(TBLOTE IDXLOTE2) */
  /*+ index_join(TBDAPGerada IDXGERADA2) */
  /*+ index_join(TBSR IDXSUPER) */
  /*+ index_join(TBUF IDXSUPERUF) */
  /*+ index_join(TBUF IDXSUPERUF) */
  /*+ index_join(TBMUNICIPIO IDXMUNICIPIO) */
  /*+ index_join(TBCREDITO IDXTBCREDITO,IDXTPAGFIN2) */
  /*+ index_join(TBTIPOCREDITO IDXTPTBCREDITO) */
  /*+ index_join(TBAgenteFinanceiro IDXTPAGFIN) */
  /*+ index_join(TBAssentamento IDXASSENTA,IDXASSENTA4) */
  /*+ index_join(TBTipoSituacao IDXASSENTA3) */
  BENEFICIARIO.BENEFICIARIO_IDENT_CODIGO CodigoBeneficiario,
  BENEFICIARIO.BENEFICIARIO_IDENT_NOME NomeBeneficiario,
  BENEFICIARIO.BENEFICIARIO_IDENT_PAI PaiBeneficiario,
  BENEFICIARIO.BENEFICIARIO_IDENT_MAE MaeBeneficiario,
  NACIONALIDADE.BENEFICIARIO_TPNAC_CODIGO CodigoNacionalidade,
  NACIONALIDADE.BENEFICIARIO_TPNAC_DESC Nacionalidade,
  ESTADOCIVIL.BENEFICIARIO_TPESTCIV_CODIGO CodigoEstadoCivil,
  ESTADOCIVIL.BENEFICIARIO_TPESTCIV_DESC EstadoCivil,
  BENEFICIARIO.BENEFICIARIO_IDENT_CPF CPF,
  PROJETO.PROJETO_IDENT_CODIGO CodigoProjeto,
  PROJETO.PROJETO_IDENT_NOME NomeProjeto,
  BENEFICIARIO.BENEFICIARIO_IDENT_PROCADM NumeroProcesso,
  LOTE.beneficiario_lote_numero NumeroLote,
  SEXO.sexo_codigo CodigoSexo,
  SEXO.sexo_descricao Sexo,
  BENEFICIARIO.BENEFICIARIO_IDENT_DTNASC DataNascimento,
  BENEFICIARIO.BENEFICIARIO_IDENT_DTATUALIZA DataAtualizacao,
  SITUACAO.BENEFICIARIO_TIPOSIT_CODIGO CodigoSituacao,
  SITUACAO.BENEFICIARIO_TIPOSIT_DESC Situacao,
  ASSENTAMENTO.BENEFICIARIO_ASSENT_SIT_DATA DataSituacao,
  BENEFICIARIO.BENEFICIARIO_IDENT_DTHOMOLOG DataAssentado,
  CASE WHEN DAP_GERADA.Cod_DAP IS NOT NULL THEN 'SIM' ELSE 'NÃO' END PossuiDAP,
  DAP_GERADA.Cod_DAP CodigoDAP,
  DAP_GERADA.ID_dap_gerada DAPGerada,
  DAP_GERADA.DAP_grupo DAPGrupo,
  DAP_GERADA.DAP_modelo DAPModelo,
  SR.sr_codigo CodigoSR,
  SR.sr_nome NomeSR,
  UF.COUF CodigoUF,
  UF.NOUF NomeUF,
  MUNICIPIO.COMUNIBGE CodigoIBGE,
  MUNICIPIO.NOMUN Municipio,
  PROJETOCOMPLEMENTO.Area Area,
  PROJETOCOMPLEMENTO.Capacidade Capacidade,
  PROJETOTIPOFASE.projeto_tipofase_codigo CodigoFase,
  PROJETOTIPOFASE.projeto_tipofase_descricao Fase,
  TIPOPROJETO.projeto_tipoprojeto_codigo CodigoTipoProjeto,
  TIPOPROJETO.projeto_tipoprojeto_descricao TipoProjeto,
  PROJETOCOMPLEMENTO.DataCriacao DataCriacao,
  CREDITO.crd_id CodigoCredito,
  TIPOCREDITO.tpc_codigo CodigoTipoCredito,
  tiPOCREDITO.tpc_descricao TipoCredito,
  CASE WHEN crd_complementacao  = '0' THEN CREDITO.crd_valor ELSE 0 END 
 ValorCredito,
  CREDITO.crd_data_recebimento DataCredito,
  CASE WHEN crd_complementacao  = '1' THEN CREDITO.crd_valor ELSE 0 END 
 ValorComplementacao,
 

[oracle_br] Re: consulta sql em ambiente DW

2013-10-04 Por tôpico J. Laurindo Chiappa
  Bom, esse não termina certamente quer dizer que o SQL está demorando muito, 
né não ? Sendo isso, Sorry, colega, mas se vc acha que alguém é capaz de olhar 
para esse monstrengo fazendo JOIN de MAIS DE UMA DÚZIA DE TABELAS e ,sem 
informações, sem saber a DISTRIBUIÇÃO/VOLUME/CARDINALIDADE DOS DADOS, ser capaz 
de dizer algo, vc tá esperando um pouquinho demais
  Meu conselho : 
  
  a. levante EXATAMENTE o Volume e a Cardinalidade/Distribuição dos dados 
(principalmente nas colunas sendo usadas para filtro)
  
  b. levante as condições FÍSICAS das tabelas, em especial as características 
que podem ser usadas para pular parte do acesso aos dados (tais como ìndices 
existentes e seus tipos, PARTICIONAMENTO, PKs, FKs, Domínio dos dados, etc)
  
  c. levante como estão as Estatísticas das tabelas, principalmente quanto aos 
HISTOGRAMAS nas colunas que vc sabe/descobriu que possuem distribuição de dados 
irregular
  
  d. retire da query temporariamente as tabelas/colunas de pequena monta que 
trazem informação cadastral e/ou tem pequeno volume de dados (como Municipio e 
UF, provavelmente), mas não só elas - só VOCÊ sabe quais 
  
  == feito isso, vc vai capturar um Plano de Execução real e completo 
(INCLUSIVE com A_ROWS e E-ROWS, condiçoes de filtro, tudinho) , que daí vc 
poderá COMPARAR a quantidade de linhas de cada passo do plano com o que vc 
levantou acima... Isso CERTAMENTE vai te dar algum insight... 
  
   E é claro, num ambiente DW é Extremamente Comum que vc veja full table 
scans, pois vc via de regra PRECISA recuperar um montão de linhas, lendo 
segmentos inteiros, e o FTS é ESPECIALMENTE eficiente nisso, yep ??? Considere 
a possibilidade de TIRAR esses HINTs forçando uso de índices...
 E outra : nesses casos é simplesmente CRÍTICO, e pode ser a diferença entre 
SUCESSO e FALHA, a organização física, ie, vc ter tabelas particionadas aonde 
haja partições que possam ser puladas, views materializadas que TRAGAM 
resultados pré-computados, é por aí
   
[]s
 
  Chiappa

--- Em oracle_br@yahoogrupos.com.br, orfeu lima orfeuml@... escreveu

 Boa tarde Srs. do grupo,
 Temos um ambiente de dw com as seguintes configurações.
 S. O - Red Hat 5.5
 Oracle 11.2.0.3
 Discos em ASM
 Estou tentando executar o select abaixo, mas não estou conseguindo. A 
 instrução está executando mas não termina.
 Gostaria de pedir sugestão aos membros do grupo para poder estar melhorando 
 essa instrução.
 Índices foram criados.
 Obrigado
 Segue abaixo a instrução sql.
 SELECT 
  /*+ index_join(TBBENEFICIARIO IDXTPSEXO,IDXLOTE,IDXLOTE2) */
  /*+ index_join(TBPROJETO 
 IDXPROJETO,IDXTP_PROJETO,IDX_PROJETO_COMPLEMENTA,IDXSUPER2,IDXPROJMUN) */
  /*+ index_join(TBTIPOPROJETO IDXTPPROJETO) */
  /*+ index_join(TBProjetoTipoFase IDXTPPROJ,IDXTPROJTPFASE) */
  /*+ index_join(TBPROJETOCONSTITUICAO IDXTPROJTPFASE2) */
  /*+ index_join(TBTIPOSEXO IDXTPSEXO2) */
  /*+ index_join(TBLOTE IDXLOTE2) */
  /*+ index_join(TBDAPGerada IDXGERADA2) */
  /*+ index_join(TBSR IDXSUPER) */
  /*+ index_join(TBUF IDXSUPERUF) */
  /*+ index_join(TBUF IDXSUPERUF) */
  /*+ index_join(TBMUNICIPIO IDXMUNICIPIO) */
  /*+ index_join(TBCREDITO IDXTBCREDITO,IDXTPAGFIN2) */
  /*+ index_join(TBTIPOCREDITO IDXTPTBCREDITO) */
  /*+ index_join(TBAgenteFinanceiro IDXTPAGFIN) */
  /*+ index_join(TBAssentamento IDXASSENTA,IDXASSENTA4) */
  /*+ index_join(TBTipoSituacao IDXASSENTA3) */
  BENEFICIARIO.BENEFICIARIO_IDENT_CODIGO CodigoBeneficiario,
  BENEFICIARIO.BENEFICIARIO_IDENT_NOME NomeBeneficiario,
  BENEFICIARIO.BENEFICIARIO_IDENT_PAI PaiBeneficiario,
  BENEFICIARIO.BENEFICIARIO_IDENT_MAE MaeBeneficiario,
  NACIONALIDADE.BENEFICIARIO_TPNAC_CODIGO CodigoNacionalidade,
  NACIONALIDADE.BENEFICIARIO_TPNAC_DESC Nacionalidade,
  ESTADOCIVIL.BENEFICIARIO_TPESTCIV_CODIGO CodigoEstadoCivil,
  ESTADOCIVIL.BENEFICIARIO_TPESTCIV_DESC EstadoCivil,
  BENEFICIARIO.BENEFICIARIO_IDENT_CPF CPF,
  PROJETO.PROJETO_IDENT_CODIGO CodigoProjeto,
  PROJETO.PROJETO_IDENT_NOME NomeProjeto,
  BENEFICIARIO.BENEFICIARIO_IDENT_PROCADM NumeroProcesso,
  LOTE.beneficiario_lote_numero NumeroLote,
  SEXO.sexo_codigo CodigoSexo,
  SEXO.sexo_descricao Sexo,
  BENEFICIARIO.BENEFICIARIO_IDENT_DTNASC DataNascimento,
  BENEFICIARIO.BENEFICIARIO_IDENT_DTATUALIZA DataAtualizacao,
  SITUACAO.BENEFICIARIO_TIPOSIT_CODIGO CodigoSituacao,
  SITUACAO.BENEFICIARIO_TIPOSIT_DESC Situacao,
  ASSENTAMENTO.BENEFICIARIO_ASSENT_SIT_DATA DataSituacao,
  BENEFICIARIO.BENEFICIARIO_IDENT_DTHOMOLOG DataAssentado,
  CASE WHEN DAP_GERADA.Cod_DAP IS NOT NULL THEN 'SIM' ELSE 'NÃO' END PossuiDAP,
  DAP_GERADA.Cod_DAP CodigoDAP,
  DAP_GERADA.ID_dap_gerada DAPGerada,
  DAP_GERADA.DAP_grupo DAPGrupo,
  DAP_GERADA.DAP_modelo DAPModelo,
  SR.sr_codigo CodigoSR,
  SR.sr_nome NomeSR,
  UF.COUF CodigoUF,
  UF.NOUF NomeUF,
  MUNICIPIO.COMUNIBGE CodigoIBGE,
  MUNICIPIO.NOMUN Municipio,
  PROJETOCOMPLEMENTO.Area Area,
  PROJETOCOMPLEMENTO.Capacidade Capacidade,
  PROJETOTIPOFASE.projeto_tipofase_codigo CodigoFase,
  

[oracle_br] Re: Consulta SQL

2008-01-31 Por tôpico zidvlauns
Se entendi direito o que vc quer fazer a resposta seria algo assim:
SELECT P.ID_PLANO,COUNT(U.ID_USUARIO) FROM USUARIO U, PLANOS_CONTRATO
PC, PLANOS P WHERE PC.ID_PLANO_CONTRATO=U.ID_PLANO_CONTRATO AND
PC.ID_PLANO=P.ID_PLANO GROUP BY P.ID_PLANO


--- Em oracle_br@yahoogrupos.com.br, Haroldo Gondim Torres Filho
[EMAIL PROTECTED] escreveu

 Olá pessoal, sou novo aqui no grupo
 
 alguém poderia me ajudar a fazer uma consulta
 
 a estrutura e mais ou menos assim
 
 tabela usuario [id_usuario, id_plano_contrato]
 tabela planos_contrato [plano_contrato, id_plano]
 tabela planos[id_plano, descricao]
 
 possui outros atributos, + acho que não influenciem
 
 
 o que eu preciso é a quantidade de usuários por plano