Mi experiencia de administración de IBM DB2 Express-C cuando se usa con 1C: Enterprise

Tuve la oportunidad de trabajar con IBM DB2. Tanto en 1C como en el servidor de Django utilizaron este DBMS a la vez, procesaron las solicitudes OLAP con bastante rapidez (aunque era necesario configurar manualmente los índices, y del servidor web, por supuesto, de modo que la respuesta fuera en 2 segundos). En 2015, preparé esta pequeña instrucción para mí, para no olvidar. Y como complemento al currículum, tal vez alguien leyó en papel, los años restantes de trabajo permanecieron inactivos. Alguna generalización de mi experiencia con DB2. Lo corregí un poco y sugiero leerlo aquí para ampliar mis horizontes. Quizás alguien esté interesado. Debo decir de inmediato que desde entonces no he trabajado con DB2, todo se ha olvidado, pero aún recuerdo algo. Las críticas y las aclaraciones son bienvenidas, pero como ya no trabajo, tal vez no para mí, pero para alguien más serán útiles.

Hay muchas instrucciones en Internet sobre cómo organizar el trabajo de 1C: Enterprise con IBM DB2 DBMS. Para empezar, esto no es malo en absoluto, pero no es suficiente para su uso en la producción. Previamente recomendé comenzar con IBM DB2 con el curso de capacitación DB101RU de Big Data University. Yo mismo tomé este curso, aprobé el examen en 2012, creo que es muy útil. Es una pena que el recurso haya dejado de existir. En la nueva plataforma, no encontré nada igual. En producción, IBM DB2 requiere configuración y mantenimiento adicionales, los más necesarios se describirán brevemente aquí. Estamos considerando una edición gratuita de IBM DB2 Express-C para Windows versiones 10.1fp2 y 10.5fp4 (la primera es compatible con 1C para trabajar en modo de prueba, la segunda es oficialmente compatible, es una pena que solo se paguen las versiones más nuevas). Tiene sentido instalar 10.5 de 64 bits donde hay altos requisitos de RAM (tamaño de búfer para velocidad) o tamaño de grabación (EXTENDED_ROW_SZ = ENABLE) cuando se usan tipos compuestos que contienen cadenas largas de tamaño fijo.

Lo primero que debe hacerse es cambiar al uso de revistas archivadas para hacer copias de seguridad sin interrumpir la operación de 1C: Enterprise, y poder restaurar la base de datos en cualquier momento (la restauración a 10.1fp2 tiene sus propias peculiaridades debido a una falta de corrección error en la versión gratuita: se requiere el movimiento manual de los archivos de registro). A diferencia de MS SQL, el archivado de registros no se lleva a cabo en ciertos puntos de tiempo predeterminados (en MS SQL no es fuerte, quizás haya algo más), y cuando el archivo de registro alcanza un cierto tamaño predeterminado, no es necesario hacer una copia de seguridad del registro antes de la operación de restauración, solo desactiva la base. Archivar registros en dos direcciones se configura fácilmente, uno de los cuales está en una unidad de red, por ejemplo. Además, en el caso de interrupciones breves de la red, el aumento en el espacio ocupado por las revistas activas no es significativo. Para los registros activos, debe proporcionar suficiente espacio libre para poder restaurar la base de datos en cualquier momento. Si durante el trabajo del programador con la base 1C, se requieren devoluciones frecuentes en varios puntos cercanos en el tiempo, una copia de seguridad es suficiente para restaurar, la elección de los archivos de registro para la recuperación es muy simple. Asegúrese de activar la base de datos al comienzo de la instancia, de lo contrario obtendremos una gran cantidad de pequeños archivos de registro con activación implícita. Obviamente, debe establecer el tiempo de almacenamiento de la copia de seguridad (me parece que necesita almacenar registros durante al menos dos meses) y configurar la eliminación automática. La base y las copias de seguridad (registros) deben estar en diferentes discos físicos, en casos extremos, puede hacer copias de seguridad en otra computadora en la red local.

La activación de base también es necesaria por otra razón. Para el funcionamiento normal, debe instalar el mantenimiento en línea y fuera de línea de Windows. En este momento, la base debe estar activa. Periódicamente, debe consultar el historial de la base de datos para averiguar qué acciones se realizaron durante la ventana sin conexión. Lo más probable es que la ventana de mantenimiento fuera de línea se establezca entre las 22:00 y las 0:00, ya que no hay tareas de mantenimiento de 1C en este momento. Quizás para bases pequeñas una ventana que dura 1 hora es suficiente.

Periódicamente, debe realizar una comprobación de la necesidad de reorganización en modo manual y, después de analizar el estado de tablas e índices, realizar una reorganización de objetos individuales. La reorganización manual de varios miles de tablas e índices puede llevar mucho tiempo. El análisis se acelera fácilmente mediante un filtro simple (en .js, por ejemplo) usando regexp.

AUTOCONFIGURE, por supuesto, debe hacerse periódicamente, corrigiendo manualmente las configuraciones individuales, por ejemplo, configurando su propio tamaño de archivo de registro.

Después de un día, es posible y con mayor frecuencia realizar copias de seguridad en línea de la base de datos (no requiere un apagado y la presencia de un DBA), la frecuencia depende del tiempo de recuperación requerido, que a su vez depende de la cantidad de archivos de registro archivados después de la última copia de seguridad, es decir, la carga en la base de datos. Para bases de datos medianas, grandes y muy cargadas, tiene sentido usar varios tipos de copias de seguridad incrementales para reducir el espacio ocupado por las copias de seguridad y el tiempo de recuperación de las copias de seguridad. Después de cada copia de seguridad y antes de restaurar, verifique el estado de las copias de seguridad. El tiempo de almacenamiento de la copia de seguridad queda a discreción del DBA, pero no menos que el tiempo de almacenamiento de los registros.

Al menos una vez al mes, realice comprobaciones de estado de la base de datos fuera de línea y en línea (en modo fuera de línea, el trabajo con la base de datos se suspende durante varios minutos) y, si es necesario, realice reparaciones (lo más importante para los "servidores" sin un UPS). Realice copias de seguridad fuera de línea de la base de datos mensualmente, solo las copias de seguridad fuera de línea se almacenarán durante mucho tiempo, porque cuando cambie la versión de DB2, no será posible implementar copias de seguridad en línea. Si "1C: Enterprise" no permite incluso una traducción a corto plazo de la base de datos fuera de línea para verificación o respaldo, es posible realizar las acciones indicadas en una copia ampliada de la base de datos. La base de datos se restaura desde la copia de seguridad a otra ubicación sin ningún problema, por ejemplo, a otro disco en otro servidor. Cabe señalar que tanto las copias de seguridad como los registros archivados se pueden comprimir utilizando las herramientas de DB2 (en este caso, la herramienta de verificación de copias de seguridad sigue siendo funcional y la herramienta de verificación de registros archivados no funciona).

Antes de verificar sin conexión la base de datos y la copia de seguridad sin conexión, debe configurar la base de datos y las tareas programadas para que se bloqueen. En una emergencia, puede hacerlo con la estabilización de la base de datos, pero dado que el usuario bajo el cual se ejecuta el servidor 1C: Enterprise está incluido en el grupo SYSADM_GROUP, esto no cancelará la capacidad de conectar 1C a la base de datos en el momento incorrecto y, como resultado, necesitará un segundo lanzamiento de trabajo.

Si la base de datos no funciona rápidamente, después de actualizar las estadísticas, debe obtener los planes de consulta más severos, experimentar con los índices 1C en una copia de la base de datos, monitorear los cambios en el plan de consulta en IBM Data Studio (en este caso, el uso de eclipse está justificado, en otros es suficiente con la interfaz de comando líneas), o utilice las recomendaciones del Asesor de diseño de DB2 y, si es necesario, cree índices manualmente fuera de 1C. Al mismo tiempo, comience a recopilar información detallada sobre el rendimiento utilizando las herramientas de DB2 (más de una docena de scripts SQL) y analice la carga con el monitor del sistema. Para reducir la carga en el sistema de disco, la base de datos debe instalarse en un disco de alta velocidad separado de tamaño suficiente (a menos, por supuesto, que esté disponible una matriz de discos de servidor RAID 10 normal), es posible colocar registros activos en el SSD junto con el sistema operativo. Probablemente, también deberá cambiar la ubicación de los tempos del servidor 1C: Enterprise. Si la compra de un disco solo se planifica, para las organizaciones pequeñas se permite usar temporalmente un solo disco físico para la base de datos.

Revise db2diag.log diariamente para detectar errores, así como los resultados de acciones con la base de datos. Archive al alcanzar un tamaño de varias decenas de megabytes. Far Manager puede ser una forma conveniente de ver el registro (se supone que hay pocos errores en la base de datos), también ayudará si necesita mover manualmente los registros de archivo para restaurar en un momento determinado.

Una de las ventajas competitivas de IBM DB2, según me parece, puede considerarse que en los casos en que MS SQL Server requiere un servidor 1C: Enterprise de 64 bits para el funcionamiento normal, IBM DB2 puede hacerlo con 32 bits.

UPD: Quizás no tuvo cuidado al verificar las versiones de DB2 compatibles con 1C: Enterprise antes de publicar. En el original de este texto de 2015, alrededor de 10.5 fp4 se decía: cuando se usa con 1C: Enterprise, "aún no se han detectado errores". Es decir, en este momento, del nuevo Express-C, solo 10.1 es posible (con sus características y limitaciones). De los pagos actuales, solo 11.1 es oficialmente compatible. Es posible que alguien tenga suficiente Developer-C con un tamaño de base de datos de hasta 100 GB. No cambié el enlace a la documentación; es fácil cambiar allí.

UPD: Releyé todo, probablemente debería estar claro para alguien que estaba tratando con DB2, pero tal vez se requiera alguna aclaración para aquellos que son nuevos en trabajar con este DBMS, por ejemplo
debería ver el historial de la base
debería traer aquí también
realizar comprobaciones de estado de la base de datos en línea y sin conexión
aquí , aquí y aquí , pero en el último caso ya puede ser necesario
tal archivo por lotes
@echo off
setlocal
db2 list applications for db %1 && exit /b
set active=no
db2 list active databases | findstr /i /r "=\ %1$" >nul && set active=yes
if %active%==yes db2 deactivate db %1 || (db2 activate db %1 & exit /b)
db2 CONNECT TO %1
db2 QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS
db2 CONNECT RESET
::db2set DB2_DIRECT_IO=OFF
db2dart %1 /RPT . /ERR E
::db2set DB2_DIRECT_IO=
db2 CONNECT TO %1
db2 UNQUIESCE DATABASE
db2 CONNECT RESET
if %active%==yes db2 activate db %1


Y aqui esta eso
El análisis se acelera fácilmente mediante un filtro simple (en .js, por ejemplo) usando regexp.
puede causar dificultades, no estoy seguro si alguien hace esto, depende de la automatización, el máximo está limitado a esta consulta: db2 "SELECT substr(TABSCHEMA,1,20), substr(TABNAME,1,20) FROM SYSIBMADM.ADMINTABINFO WHERE REORG_PENDING = 'Y'" Sin embargo
obtener la información que necesita es fácil
Para hacer esto, primero ejecute este comando db2 -x "select 'reorgchk update statistics on table',substr(rtrim(tabschema)||'.'||rtrim(tabname),1,50),';' from syscat.tables where type = 'T' " > reorgchk.out db2 -x "select 'reorgchk update statistics on table',substr(rtrim(tabschema)||'.'||rtrim(tabname),1,50),';' from syscat.tables where type = 'T' " > reorgchk.out y luego db2 -tvf reorgchk.out > reorgchk.txt y finalmente reorg_filter.js reorgchk.txt Aquí está el script WSH reorg_filter.js que muestra una lista de objetos potencialmente problemáticos, que probablemente debería ser pequeño si las ventanas de mantenimiento están instaladas correctamente:
 var block = "", include = false, fso = new ActiveXObject("Scripting.FileSystemObject"); var input = fso.OpenTextFile(WScript.Arguments.Item(0), 1, false); var output = fso.CreateTextFile(WScript.ScriptFullName.replace(/\.js/i, ".txt"), true); while(!input.AtEndOfStream){ line = input.ReadLine(); if(/^reorgchk\s/i.test(line)){ if(include)output.WriteLine(block); block = ""; include = false; } block += line + "\n"; if(/\s([-*]{3}|[-*]{5})\s+$/.test(line))if(/\*/.test(RegExp.$1))include = true; } if(include)output.WriteLine(block); 

Luego, analice la descripción e inicie la reorganización de los objetos seleccionados o aumente la ventana de mantenimiento fuera de línea. Después de varias iteraciones, queda claro qué objetos no realizan la reorganización.
Espero no confundir nada, levanté el archivo de guiones de cinco años, probablemente con receta. No sé si este suplemento será útil para alguien.

Enlaces a recursos / archivos mencionados


La información básica, a excepción de la que se obtuvo en cursos que ya no existen, se puede encontrar aquí (entonces el enlace era diferente).

Ya se ha olvidado mucho, pero un enlace al documento pdf “Mejores prácticas. Ajuste y supervisión del rendimiento del sistema de la base de datos ” (el enlace ahora es nuevo, el wiki antiguo deja de existir desde el 01-01-2020, pero hasta ahora todo no es bastante estable).
Si el enlace deja de funcionar, el nombre y los hashes del archivo:
Nombre: DB2BP_System_Performance_0813.pdf
SHA384: 180E EF56 DB7F 70DE A514 981C 2718 ADD1 5702 D142 ABFD 090C A2B1 529C E918 B7AE DD08 7C7E B36C 3466 C843 C808 D4DA DE66
SHA256: A1B3 C600 B28A 8B9F 25ED 4AC3 F6C2 C6BB F884 BDA5 4121 DA1A 9C05 D0B0 F5CF D84E
MD5: F086 F0DD 6CFC 4DAB 4723 FBE4 A2BE AB41
SHA512: 6C86 B044 7F60 1DDA AFA5 D726 A6C2 9B29 68DD 3A90 1606 DA17 0464 5213 C0B0 B3C8 E636 221A 316D 151F 7E05 2B6D 55EB 95FC 09E7 B1AD 8CFE 0848 AB9F 9408 D214 35
SHA1: 7911 0741 2E6C FD6B 4B5B F639 5C0D 48D8 3528 A64D

Source: https://habr.com/ru/post/465981/


All Articles