Las tablas externas de OSS permiten consultar datos en Object Storage Service (OSS) directamente from AnalyticDB for PostgreSQL sin necesidad de importarlos previamente. El rendimiento de las consultas depende de qué tan bien entienda el optimizador sus datos y de cómo estén organizados los objetos en OSS. Siga estas prácticas para aprovechar al máximo los escaneos paralelos, obtener planes de consulta precisos y lograr diseños de archivos eficientes.
Si estas optimizaciones no alcanzan los niveles de rendimiento que requiere, considere utilizar partitioned OSS foreign tables, ya que pueden reducir significativamente el alcance del escaneo al eliminar particiones irrelevantes durante la ejecución de la consulta.
Consultar planes de ejecución
Utilice EXPLAIN para inspeccionar el plan de ejecución de cualquier consulta que involucre tablas externas de OSS:
EXPLAIN SELECT COUNT(*) FROM oss_lineitem_orc WHERE l_orderkey > 14062498;
Revise el plan para comprobar que el optimizador de consultas elija órdenes de unión y métodos de escaneo eficientes, especialmente en consultas complejas sobre varias tablas.
Recopilar estadísticas
AnalyticDB for PostgreSQL no recopila estadísticas automáticamente para las tablas externas de OSS. A diferencia de las tablas regulares almacenadas localmente, las tablas externas de OSS residen en OSS, por lo que la base de datos no cuenta con un mecanismo automático para muestrearlas. Sin estadísticas actualizadas, el optimizador de consultas trabaja con estimaciones y podría elegir un plan ineficiente; por ejemplo, seleccione una estrategia de unión o de difusión incorrecta en consultas que combinan varias tablas.
Ejecute ANALYZE manualmente cada vez que sus datos cambien significativamente:
-
Consulte el plan de ejecución actual:
EXPLAIN <table_name>; -
Recopile estadísticas:
ANALYZE <table_name>; -
Consulte el plan de ejecución actualizado para confirme que el optimizador genera ahora un plan más eficiente:
EXPLAIN <table_name>;
Dividir objetos grandes
Las tablas externas de OSS admiten escaneos paralelos en varios nodos. Cada nodo escanea un objeto independiente, por lo que si sus datos consisten en pocos archivos grandes, la mayoría de los nodos permanecerán inactivos. Divida los archivos grandes en otros más pequeños para que cada nodo tenga un objeto separado que escanear en paralelo; esto mejora significativamente el rendimiento de las consultas.
El siguiente ejemplo muestra cómo dividir un archivo CSV grande en Linux.
-
Compruebe el número de filas del archivo:
wc -l <csv_file> -
Divida el archivo en archivos más pequeños, cada uno con
Nfilas:split -l N <csv_file>Reemplace
Ncon el número de filas por archivo de salida. El comandosplitconserva los límites de las filas, por lo que ninguna fila se divide entre varios archivos de salida.
Consultar información de objetos
Para inspeccionar los objetos que respaldan una tabla externa de OSS, ejecute:
SELECT * FROM get_oss_table_meta('<OSS FOREIGN TABLE>');
Reemplace <OSS FOREIGN TABLE> con el nombre de la tabla externa de OSS.