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/64M
los archivos de registro de obstrucción según Influencia.log_disk_size
log_disk_percentage
- Si
log_disk_size
el valor de es 0 ylog_disk_percentage
el valor de no es 0, el sistemalog_disk_percentage
asigna el espacio del disco de registro de acuerdo con el valor establecido por el elemento de configuración. - Si
log_disk_size
el valor de no es 0, sin importar silog_disk_percentage
el valor de es 0 o no, el sistema asignarálog_disk_size
el espacio del disco de registro de acuerdo con el valor establecido por el elemento de configuración. - Si los valores de
log_disk_size
ylog_disk_percentage
son 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_size
y log_disk_percentage
por 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_server
ver el uso específico a través de la tabla del sistema. Entre ellos log_disk_capacity
se 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_config
un 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_size
inquilino creado . log_disk_size
La 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_server
mesa 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_server
de la tabla log_disk_in_use
.
Podemos gv$ob_units
ver 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_assinged
la columna de all_virtual_server corresponde a la suma gv$ob_units
de log_disk_size
los 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_use
La columna de all_virtual_server corresponde a la suma gv$ob_units
de log_disk_in_use
los 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_id
que la suma de los directorios es de unos 30G, es decir, LOG_DISK_CAPACITY=30G
el tamaño del directorio tent_id corresponde al gv$ob_units
de 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_TENANTS
ver 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_stat
ver 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_OBJECTS
y . CDB_OB_TABLET_TO_LS
Por 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_OBJECTS
nosotros podemos consultar el ID del fragmento correspondiente a la tabla especificada: tablet_id(DATA_OBJECT_ID)
- A través de
CDB_OB_TABLET_TO_LS
nosotros 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 |