¿Cómo cambio las columnas de distribución?
En una base de datos de almacén de datos, debe elegir cuidadosamente las columnas de distribución para las tablas grandes, ya que pueden afectar al rendimiento de la base de datos y las consultas. Si se utiliza una clave de distribución incorrecta, puede producirse un sesgo de datos después de importar los datos. Como resultado, el uso de algunos discos será mucho más alto que el de otros discos, e incluso el clúster puede llegar a ser de solo lectura. Si se utiliza la política de distribución hash y se produce un sesgo de datos, el rendimiento de E/S de algunos DN será deficiente, lo que afectará al rendimiento general de la consulta. La selección y el ajuste adecuados de las columnas de distribución son fundamentales para el rendimiento de las consultas de tabla.
Si se utiliza la política de distribución hash, debe comprobar las tablas para asegurarse de que sus datos estén distribuidos uniformemente en cada DN. Generalmente, más del 5% de diferencia entre la cantidad de datos en diferentes DN se considera como sesgo de datos. Si la diferencia es superior al 10%, tiene que elegir otra columna de distribución.
Para las tablas que no están distribuidas uniformemente, ajuste sus columnas de distribución para reducir el sesgo de datos y evitar problemas de rendimiento de la base de datos.
Elección de una columna de distribución apropiada
La columna de distribución de una tabla hash debe cumplir los siguientes requisitos, que se clasifican por prioridad en orden descendente:
- Los valores de la clave de distribución deben ser discretos para que los datos puedan distribuirse uniformemente en cada DN. Puede seleccionar la clave principal de la tabla como clave de distribución. Por ejemplo, para una tabla de información de persona, elija la columna número de tarjeta de identificación como clave de distribución.
- No seleccione la columna donde existe un filtro constante.
- Seleccione la condición de unión como columna de distribución, de modo que las tareas de unión se puedan empujar hacia abajo a los DN para ejecutar, reduciendo la cantidad de datos transferidos entre los DN.
- Se pueden seleccionar varias columnas de distribución para distribuir los datos de manera uniforme.
Procedimiento
Ejecute la sentencia select version(); para consultar la versión actual de la base de datos. El rendimiento requerido varía según la versión.
- Para las versiones 8.0.x y anteriores, reconstruya una tabla.
- Utilice Data Studio o gsql en Linux para acceder a la base de datos.
- Cree una tabla.
En las instrucciones siguientes, table1 es el nombre original de la tabla y table1_new es el nombre de la nueva tabla. column1 y column2 son los nombres de columna de distribución.
1 2 3 4
CREATE TABLE IF NOT EXISTS table1_new ( LIKE table1 INCLUDING ALL EXCLUDING DISTRIBUTION) DISTRIBUTE BY HASH (column1, column2);
- Migre datos a la nueva tabla.
1 2 3 4
START TRANSACTION; LOCK TABLE table1 IN ACCESS EXCLUSIVE MODE; INSERT INTO table1_new SELECT * FROM table1; COMMIT;
- Compruebe que se han migrado los datos de la tabla. Elimine la tabla original.
1 2
SELECT COUNT(*) FROM table1_new; DROP TABLE table1;
- Reemplace la tabla original.
1
ALTER TABLE table1_new RENAME TO table1;
Uso de la base de datos Preguntas frecuentes
- ¿Cómo cambio las columnas de distribución?
- ¿Cómo puedo ver y establecer la codificación de caracteres de la base de datos?
- ¿Qué hago si el tipo de fecha se convierte automáticamente en el tipo de marca de tiempo durante la creación de la tabla?
- ¿Necesito ejecutar VACUUM FULL y ANALYZE en tablas comunes periódicamente?
- ¿Necesito ajustar una clave de distribución después de establecer una clave principal?
- ¿Es GaussDB(DWS) compatible con los procedimientos almacenados de PostgreSQL?
- ¿Qué son las tablas particionadas, las particiones y las claves de partición?
- ¿Cómo puedo exportar la estructura de la tabla?
- ¿Cómo puedo eliminar los datos de la tabla de manera eficiente?
- ¿Cómo puedo ver la información de la tabla extranjera?
- Si no se especifica ninguna columna de distribución, ¿cómo se almacenarán los datos?
- ¿Cómo reemplazo el resultado nulo por 0?
- ¿Cómo puedo comprobar si una tabla está almacenada en filas o en columnas?
- ¿Cómo puedo consultar la información sobre las tablas de almacén de columnas de GaussDB(DWS)?
- ¿Por qué a veces los índices de consulta de GaussDB(DWS) se vuelven inválidos?
- ¿Cómo uso una función definida por el usuario para reescribir la función CRC32()?
- ¿Cuáles son los esquemas que comienzan con pg_toast_temp* o pg_temp*?
- Soluciones a los resultados incoherentes de las consultas a GaussDB(DWS)
- ¿En qué catálogos de sistema no se puede realizar la operación de VACUUM FULL?
- ¿En qué escenarios estaría una declaración "idle in transaction"?
- ¿Cómo implementa GaussDB(DWS) las conversiones de fila a columna y de columna a fila?
- ¿Cuáles son las diferencias entre las restricciones únicas y los índices únicos?
Comentarios
¿Le pareció útil esta página?
Deje algún comentariomore