sql >> Base de Datos >  >> RDS >> Oracle

Obtener filas a una velocidad extremadamente alta

Suponiendo que ya haya verificado las cosas básicas de la red, como interfaces, firewalls, proxies, así como también los elementos de hardware del servidor DB.

Opción 1:

En lugar de:

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

intenta 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");

Más detalles aquí

Opción 2:Fetchsize

Como señaló fuertemente Stephen, el fetchsize parece demasiado grande.

Y, para un tamaño de búsqueda de 500 000, ¿cuál es su -Xms y -Xmx? Además, en Profiler, ¿cuál es el tamaño de almacenamiento dinámico más alto?

Opción 3:base de datos

  • Verifique los índices y el plan de consulta para src_schema.big_table_view

  • ¿Es esta una herramienta o un sistema de aplicación? Si solo es una herramienta, podría agregar grados paralelos, sugerencias de índice, particiones, etc. en función de las capacidades de los sistemas de base de datos

Opción 4:Temas

Di n

Puede iniciar n Subprocesos de escritor, cada uno configurado para procesar un determinado depósito, p. thread1 procesa de 0 a 10000, escribiendo en n diferentes archivos, y una vez que todos los anuncios estén listos, publíquelos, fusione los archivos, preferiblemente usando un comando de sistema operativo de bajo nivel.

Dicho esto, todo esto nunca debería ser un código predefinido como ahora. 'n' y los cubos deben calcularse en tiempo de ejecución. Y crear una cantidad de subprocesos superior a la que admite su sistema solo arruina.

Opción 5:

En lugar de

select * from src_schema.big_table_view

Podrías usar

SELECT column1||CHR(9)||column2||CHR(9).....||columnN FROM src_schema.big_table_view

Esto evita crear 500000 StringBuilders y Strings . (Suponiendo que no haya ningún otro formato complejo involucrado). CHR(9) es el carácter de tabulación.

Opción 6:

Mientras tanto, también puede verificar con su DBA cualquier problema del sistema de base de datos y generar una SR con Soporte de Oracle .