Hola,
Considera tu impacto, pero al final vas a tener que interrumpir el
servicio.
Tus ideas van por buen camino,
Crea la nueva tablas con las columnas nuevas y luego la pueblas.
Create table tabalanueva As select *,nuevacol1,nuevacol2, nuevacol3
from tablaVieja
Saludos,
Gilberto
El 2019-04-04 14:31, Carlos T. Groero Carmona escribió:
Hola a todos,
Necesito adicionar tres columnas a una tabla en mi base de datos de
production ques 24/7.
La tabla tiene unos 2.5 millones de registros, pero es muy concurrida,
es decir, es una de las tablas en las cuales se esta escribiendo
constantemente, por lo que es necesario evitar cualquier tipo de lock,
o al menos que dure lo menos posible.
Una vez adicionada las tres columnas, estuve probando varias ideas y
posibilidades en un servidor de prueba que tengo, como:
1. Correr un siemple update sin condiciones, es decir:
update table set col_1=false, col_2=false, col_3=false;
Resultados:
a) la consulta duro 33 segundos, durante ese tiempo
b) pude hacer select e incluso vacuum a la tabla, pero
c) no puedo hacer ning update hasta que el update no termine.
Pero no confio mucho utilizando esta opction porque se que en el
servidor de production con mayor carga de trabajo va a durar mucho mas
tiempo.
2. Cree una function para poner todos los id de la tabla en un cursor
y despues utilizarlos en la clausala where del update, sabia que seria
lento pero imagine que quizas como estaba actualizando una tupla a la
vez me dejaria escribir en la tabla, pero bueno estaba equivocado, no
pude hacerlo y como se demoraba demaisado pues lo cancele. Probe hacer
start transaction/commit pero no funciono.
3. Esta no la he probado, pero bueno es una opcion a considerar, y es
crear una tabla_temp utilizando el mismo formato (create table like),
ponerle las columnas y los valores por defecto de esas columnas, hacer
un vacuum en la otra tabla y copiar los valores con insert/select y
despues renombrar las tablas. lo malo que en lo que esa informacion se
copia cualquier data que se actualizo despues de haber sido copiada,
tendra que ser modificada nuevamente y entonces estaria bloqueando de
todas maneras.
Seguire probando, pero les agradeceria mucho si tiene alguna
sugerencia.
Saludos,
Carlos.