Exploración del directorio de obstrucciones de OceanBase 4.1.0

Con base en los antecedentes de cómo la versión OceanBase 4.x cuenta la generación diaria de registros de obstrucciones de los inquilinos, explore y cómo ver el uso de las obstrucciones de los inquilinos.

Autor: Jiang Yu

Miembro del equipo de Acson DBA, bueno en la resolución de problemas y procesamiento de bases de datos. Apasionado por la tecnología, la práctica es el único criterio para probar la verdad~

Fuente de este artículo: contribución original

  • Producido por la comunidad de código abierto de Aikesheng, no se permite usar el contenido original sin autorización, comuníquese con el editor e indique la fuente para la reimpresión.

Autor: Jiang Yu, miembro del equipo de DBA de Acson, es bueno en la resolución de problemas y el procesamiento de bases de datos. Apasionado por la tecnología, la práctica es el único criterio para probar la verdad~

Sabemos que el directorio de obstrucción es un directorio de registro físico que almacena las operaciones de modificación de registros de la base de datos de OceanBase. La ubicación de almacenamiento físico específico del directorio es /data/log1/clustername/clog. Por ejemplo, el directorio de obstrucción del clúster ACTION_OB se muestra en la siguiente figura:

OceanBase versión 4.1.0 utiliza flujos de registro a nivel de arrendatario para agregar registros de cambios físicos en varios flujos de registro bien organizados: un flujo de registro del sistema y múltiples flujos de registro de usuario. Toda la información de cambios físicos del sistema se registra en estos flujos de registro, y se utiliza un conjunto de información de cambios físicos para la recuperación de fallas, el archivado de registros y la sincronización de la base de datos en espera. En un arrendatario, un flujo de registro permite varias réplicas y los datos se sincronizan entre varias réplicas según el protocolo Paxos.

El directorio de obstrucción de OceanBase versión 4.1.0 ya no es el archivo de obstrucción de OBServer, sino una nueva capa de directorios: log_pool y tenant_id. Introduzcamos las funciones de estos dos tipos de directorios respectivamente.

directorio log_pool

OceanBase inicializará un grupo de preasignación de registro para cada nodo OBServer, que es la capacidad total del disco de registro LOG_DISK_CAPACITY del nodo OBServer, y el archivo de obstrucción tiene un valor predeterminado de 64 M, y log_pool preasignará todos log_disk_capacity/64Mlos archivos de registro de obstrucción según Influencia.log_disk_sizelog_disk_percentage

  • Si log_disk_sizeel valor de es 0 y log_disk_percentageel valor de no es 0, el sistema log_disk_percentageasigna el espacio del disco de registro de acuerdo con el valor establecido por el elemento de configuración.
  • Si log_disk_sizeel valor de no es 0, sin importar si log_disk_percentageel valor de es 0 o no, el sistema asignará log_disk_sizeel espacio del disco de registro de acuerdo con el valor establecido por el elemento de configuración.
  • Si los valores de log_disk_sizey log_disk_percentageson ambos 0, el sistema calculará automáticamente el porcentaje del espacio total en disco ocupado por el registro Redo según si el registro y los datos comparten el mismo disco:
    • Cuando se comparte, el registro Redo ocupa el 30 % del espacio total del disco donde reside.
    • Cuando es exclusivo, el registro Redo ocupa el 90 % del espacio total del disco donde reside.

log_disk_sizey log_disk_percentagepor defecto son 0. Si no hay una configuración especial, el uso total de la capacidad del disco de registro de OBServer se determina de acuerdo con la tercera situación anterior. El disco de registro de OceanBase en el entorno de prueba local no está dividido en discos y comparte el mismo disco con el directorio de datos del disco de datos de OceanBase. Por lo tanto, el disco de registro de OceanBase ocupa el 30% del espacio total del disco donde se encuentra, es decir, 30G.

Podemos __all_virtual_serverver el uso específico a través de la tabla del sistema. Entre ellos log_disk_capacityse encuentra la capacidad total del disco de registro del nodo OBServer actual, que es de aproximadamente 30G.

¿Qué significa la asignación de disco de registro log_disk_assigened y el uso del disco de registro log_disk_in_use ? Seguimos mirando hacia abajo.

directorio id_inquilino

Un inquilino se representa como una unidad de recurso de unidad en un OBServer, v4 agrega unit_configun nuevo atributo LOG_DISK_SIZE (tenga en cuenta que es diferente del parámetro del sistema ) e inicializa un espacio de directorio obstruido del tamaño del log_disk_sizeinquilino creado . log_disk_sizeLa ubicación de almacenamiento específica es el directorio mencionado anteriormente /data/log1/clustername/clog/tenant_id. Cree directorios de registro que pertenezcan a diferentes arrendatarios según el id_de arrendatario de diferentes arrendatarios.

Cabe señalar que esta parte del espacio no se asigna al directorio propio del arrendatario al principio, sino que se reserva.Cuando el arrendatario no utiliza el archivo de obstrucción, se reservará en el log_pool, que se representa como un campo del all_virtual_servermesa log_disk_assigned_ Cuando un inquilino necesita escribir un nuevo archivo de obstrucción, OceanBase asignará el archivo de obstrucción en log_pool al directorio de inquilino al que pertenece, que se expresa como un campo all_virtual_serverde la tabla log_disk_in_use.

Podemos gv$ob_unitsver la configuración de la unidad de un nodo OBServer específico a través de la vista:

  • log_disk_size: indica la capacidad máxima disponible del disco de registro de una unidad de recurso de unidad de inquilino.
  • log_disk_in_use: indica la capacidad de uso del disco de registro de una unidad de recurso de unidad de inquilino.

Como puede ver en la figura a continuación, log_disk_assingedla columna de all_virtual_server corresponde a la suma gv$ob_unitsde log_disk_sizelos valores de la columna, es decir, la capacidad del disco de registro del nodo OBServer está preasignada para cada arrendatario de acuerdo con la configuración de especificación de la unidad del arrendatario. log_disk_in_useLa columna de all_virtual_server corresponde a la suma gv$ob_unitsde log_disk_in_uselos valores de la columna, es decir, cuando un arrendatario necesita solicitar un nuevo archivo de obstrucción, log_pool distribuirá el archivo de obstrucción al directorio de registro del arrendatario.

También podemos usar el directorio del disco para observar log_pool+tenant_idque la suma de los directorios es de unos 30G, es decir, LOG_DISK_CAPACITY=30Gel tamaño del directorio tent_id corresponde al gv$ob_unitsde log_disk_in_use;

Después de comprender el problema del uso del espacio de directorio, cuando miré la información del inquilino del clúster de OCP, descubrí por qué hay un directorio de inquilino_1001 en el directorio del disco de registro. Nunca he creado este inquilino. ¿Por qué hay un inquilino adicional?

De hecho, tent_1001 es el inquilino Meta del inquilino 1002. A partir de la versión 4.0.0, se introdujo el concepto de inquilino Meta. El inquilino Meta es un inquilino autogestionado dentro de la base de datos de OceanBase. Cada vez que se crea un inquilino usuario, el sistema creará automáticamente un inquilino Meta correspondiente y su ciclo de vida es consistente con el del inquilino usuario. El inquilino Meta se usa para almacenar y administrar los datos privados del clúster del inquilino del usuario. Esta parte de los datos no requiere sincronización física entre bases de datos y copia de seguridad y recuperación física. Estos datos incluyen: elementos de configuración, información de ubicación, información de copia, registro estado de la transmisión e información relacionada con la copia de seguridad y la recuperación, información de combinación, etc. Los metainquilinos no pueden iniciar sesión directamente. Podemos DBA_OB_TENANTSver la información específica del arrendatario a través de la vista:

En la figura a continuación, podemos ver que el directorio tent_id no es un archivo de obstrucción específico, sino otra capa del directorio de identificación digital. El directorio de registro debajo del directorio de identificación digital es el lugar donde se almacena específicamente el archivo de obstrucción. Estas identificaciones digitales representan ¿Qué quieres decir con que seguimos mirando hacia abajo?

3. Directorio de flujo de registro

La versión 4.x de OcenaBase introduce los conceptos de flujo de registros y fragmentación. Cada partición tiene su objeto de almacenamiento de datos correspondiente, que se llama tableta. Tiene la capacidad de almacenar datos y admite la transferencia entre máquinas. Es la unidad más pequeña de balance de datos. Un flujo de registro es una entidad creada y administrada automáticamente por la base de datos de OceanBase, que representa una colección de datos, incluidas varias tabletas y flujos de registro de rehacer ordenados. Implementa la sincronización de registros de varias copias a través del protocolo Paxos, garantiza la coherencia de los datos entre las copias y logra una alta disponibilidad de los datos.

La identificación del número en la figura anterior en realidad corresponde a la identificación del flujo de registro aquí, es decir, LS_ID. Podemos gv$ob_log_statver el Id. de flujo de registro del arrendatario por. En la figura a continuación, podemos ver que la identificación del flujo de registro correspondiente al inquilino con id_inquilino = 1 es 1; la identificación del flujo de registro correspondiente al inquilino con id_inquilino = 1001 es 1; la identificación del flujo de registro correspondiente al inquilino con id_inquilino = 1002 es 1, 1001, 1002 y La estructura de directorios anterior es consistente.

También podemos ver los fragmentos correspondientes a las particiones de la tabla, la relación de asignación entre los fragmentos y los flujos de registro, y la información de ubicación de las copias del flujo de registro a través de view CDB_OBJECTSy . CDB_OB_TABLET_TO_LSPor ejemplo, queremos ver la información del flujo de registro de la tabla sbtest1 de la biblioteca de prueba del arrendatario tent_id=1002:

  • A través de CDB_OBJECTSnosotros podemos consultar el ID del fragmento correspondiente a la tabla especificada: tablet_id(DATA_OBJECT_ID)

  • A través de CDB_OB_TABLET_TO_LSnosotros podemos consultar el ID de flujo de registro del fragmento especificado: LS_ID.

obstruir el control de uso del disco

La capacidad de disco obstruido que un arrendatario puede usar es limitada. Cuando la tasa de uso de la capacidad de registro obstruido (log_disk_in_use/log_disk_size*100%) de la unidad arrendataria alcanza el umbral especificado (log_disk_utilization_threshold), el valor predeterminado es 80%, que no se puede modificar ), ya no se enviará a log_pool. En lugar de solicitar un archivo de obstrucción, se reutiliza directamente el archivo de obstrucción más antiguo.

Puede ver que el uso del disco de obstrucción del inquilino también está en línea con el valor esperado en la figura a continuación.

estadísticas de uso de obstrucciones

Después de conocer la estructura del directorio de obstrucciones, podemos contar la generación de registros diarios y por hora del inquilino calculando la generación de archivos de obstrucciones en el directorio de inquilinos, que se puede usar para estimar el uso del disco de copia de seguridad de OceanBase.

#统计租户 clog 的生成量
--每小时
find $clog_dir/tenant_$tenant_id/ -type f -regex '.*/[0-9]+'  -exec stat --format="%y" {} \; |cut -d ':' -f 1|sort|uniq -c|awk -F ' ' '{print $2" | "$3" | "$1" | "$1*64/1024 "G"}'

--每天
find tenant_1001/ -type f -regex '.*/[0-9]+'  -exec stat --format="%y" {} \; |cut -d ' ' -f 1|sort|uniq -c|awk -F ' ' '{print $2" | "$3" | "$1" | "$1*64/1024 "G"}'

# 统计租户 data 数据大小
select tenant_id,svr_ip,sum(required_size/1024/1024/1024) from CDB_OB_TABLET_REPLICAS group by tenant_id,svr_ip,svr_port;
#!/usr/bin/bash
clog_dir=/data/log1/ACTION_OB/clog
echo "-- 检查时间:`date "+%Y-%m-%d %H:%M:%S"` --"
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "log_pool剩余clog文件数量: `ls -l $clog_dir/log_pool/|grep -v meta|wc -l`"
echo "log_pool剩余空间: $(echo "scale=2;`ls -l $clog_dir/log_pool/|grep -v meta|wc -l` * 64 / 1024 "|bc) G"

for tenant_id in `ls $clog_dir|grep "tenant_*"|awk -F '_' '{print $2}'`
do
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "$tenant_id 租户当前clog文件数量: `find $clog_dir/tenant_$tenant_id/* -regex '.*/[0-9]+' -type f |wc -l`"
echo "$tenant_id 租户当前clog文件总大小: $(echo "scale=2;`find $clog_dir/tenant_$tenant_id/* -regex '.*/[0-9]+' -type f |wc -l` * 64 / 1024 "|bc) G"
echo -e "$tenant_id 租户clog按照天统计:(YYYY-mm-dd|file_num|count_size)\n`find $clog_dir/tenant_$tenant_id/ -type f -regex '.*/[0-9]+'  -exec stat --format="%y" {} \; |cut -d ' ' -f 1|sort|uniq -c|awk -F ' ' '{print $2" | "$1" | "$1*64/1024 "G"}'`"
done

El resultado de la ejecución del script se muestra en la siguiente figura:

Para obtener más artículos técnicos, visite: https://opensource.actionsky.com/

Acerca de SQLE

El SQLE de la comunidad de código abierto de Akson es una herramienta de auditoría de SQL para usuarios y administradores de bases de datos, que admite la auditoría de escenarios múltiples, admite procesos en línea estandarizados, admite de forma nativa la auditoría de MySQL y tiene tipos de bases de datos escalables.

SQLE obtener

tipo DIRECCIÓN
Repositorio https://github.com/actiontech/sqle
documento https://actiontech.github.io/sqle-docs/
lanzamiento de noticias https://github.com/actiontech/sqle/releases
Documentación de desarrollo del complemento de auditoría de datos https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse
Huawei lanzó oficialmente HarmonyOS 4 miniblink compilado con éxito, versión 108. Bram Moolenaar, el padre de Vim, el kernel de Chromium más pequeño del mundo, falleció debido a una enfermedad ChromeOS dividió el navegador y el sistema operativo en una estación independiente Bilibili (Bilibili) y colapsó nuevamente . HarmonyOS NEXT: uso completo Se lanza oficialmente el kernel de desarrollo propio Nim v2.0 y se lanza el lenguaje de programación imperativo Visual Studio Code 1.81. La capacidad de producción mensual de Raspberry Pi ha alcanzado 1 millón de unidades. Babitang lanzó el primer teclado mecánico retro
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/actiontechoss/blog/10093823
Recomendado
Clasificación