Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Buscando linhas em velocidade extremamente alta


Supondo que você já tenha verificado as coisas básicas da rede, como interfaces, firewalls, proxies, bem como os elementos de hardware do servidor de banco de dados.

Opção 1:

Ao invés de :
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1521/orcl", "user", "pass");

tente usar:
OracleDataSource ods = new OracleDataSource();
java.util.Properties prop = new java.util.Properties();
prop.setProperty("MinLimit", "2");
prop.setProperty("MaxLimit", "10");
String url = "jdbc:oracle:oci8:@//xxx.xxx.xxx.xxx:1521/orcl";
ods.setURL(url);
ods.setUser("USER");
ods.setPassword("PWD");
ods.setConnectionCachingEnabled(true);
ods.setConnectionCacheProperties (prop);
ods.setConnectionCacheName("ImplicitCache01");

Mais detalhes aqui

Opção 2:buscar tamanho

Como fortemente apontado por Stephen, o fetchsize parece muito grande.

E, para um tamanho de busca de 500.000, qual é o seu -Xms e -Xmx. Além disso, no profiler, qual é o tamanho de heap mais alto?

Opção 3:banco de dados

  • Verifique os índices e o plano de consulta para src_schema.big_table_view

  • Isso é uma ferramenta ou um sistema de aplicação. Se apenas uma ferramenta, você pode adicionar graus paralelos, dicas de índice, particionamento etc. com base nas capacidades do sistema de banco de dados

Opção 4:tópicos

Diga n
Você pode iniciar n Threads de gravador, cada um configurado para processar um determinado bucket, por exemplo thread1 processa de 0 a 10000, gravando em n arquivos diferentes, e uma vez que todos os anúncios feitos, post join, mescle os arquivos juntos de preferência usando um comando de baixo nível do SO.

Dito isso, tudo isso nunca deve ser um código pré-definido como agora. 'n' e os buckets devem ser calculados em tempo de execução. E criar um número de threads maior do que o seu sistema suporta apenas atrapalha.

Opção 5:

Ao invés de
select * from src_schema.big_table_view

Você poderia usar
SELECT column1||CHR(9)||column2||CHR(9).....||columnN FROM src_schema.big_table_view

Isso evita a criação de 500.000 StringBuilders e Strings . (Assumindo nenhuma outra formatação complexa envolvida). CHR(9) é o caractere de tabulação.

Opção 6:

Enquanto isso, você também pode verificar com seu DBA qualquer problema no sistema de banco de dados e gerar um SR com Suporte Oracle .