Pregunta

Algunos antecedentes

Cuando ensayando una implementación de producción de EE 1,11 de 1,10, nos encontramos con un problema por el que las rutinas de actualización SQL estaban añadiendo columnas al informe, registro, las ventas, las tablas de clientes por el módulo Enterprise_RMA.

Las tablas de registro sobre este particular instalan tenían filas ~ 10M, no se habían mantenido en bastante tiempo. Adición de columnas demostraron tener un muy proceso muy largo. La actualización ensayo se realizó en un AWS 4XL, y todavía tomó ~ 4 horas para completar.

Tras el análisis y la reproducción de la emisión, se encontró que las columnas se añadían uno a la vez, SHOW PROCESSLIST revela 30-45s para copy to tmp table para cada columna. Hay docenas de columnas para añadir en algunas de estas tablas.

Nuestra (pero no mi viable, favorito) solución:

Nuestra solución era para truncar las tablas de registro / informe, y tener el éxito en las mesas sales_flat_order. Podríamos haber ejecutar el archivador para mover algunos de los datos fuera (~ 600k registros o algo así) -. Pero los informes personalizados que exigían la presencia de la tabla sales_flat_order impedido nuestra capacidad de hacer eso

Nuestro despliegue final, real, la producción sigue siendo golpeado en el intervalo de 1,5 hora para la actualización de base de datos completa.

Por último, la pregunta:

¿Cómo podemos acelerar las migraciones de bases de datos de la capa de aplicación? ¿Podemos lote o rollo de seguridad de todos los estados ALTER en un puñado de ejecuciones o es sólo la naturaleza de la bestia? ¿Cómo se maneja esto para sus grandes clientes españoles? Actualizar en línea, intercambio en su lugar?

Cualquier y toda la retroalimentación recibida. Gracias de antemano.

¿Fue útil?

Solución

introducir descripción de la imagen aquí

seguirlo:

Magento-Upgrade-Replay Esto es prototipo para multi-proceso optimizado Actualiza Replay de Magento 1.5 (1.10 EE) e inferior a 1.6 (1.11 EE) y superior. Con el fin de ejecutar la repetición optimizado que necesita para ejecutar la actualización original en la base de datos con la misma estructura. usos de script de repetición pdo_mysql.log para leer las preguntas y el tiempo de ejecución estimado.

...

internos de secuencias de comandos Crear POSIX FIFO para la comunicación entre procesos. Iniciar varios procesos PHP utilizando proc_open (). Preparar las consultas de ejecución: Despojar a cabo consultas duplicadas. Combinar consultas ALTER TABLE similares. Optimizar una consulta específica de datos Dividir en trozos para la ejecución en paralelo. Los procesos secundarios están a la espera de los datos en STDIN y que pone sus documentos de identidad en vez FIFO proceso ha terminado. proceso padre lee FIFO en modo de bloqueo. Una vez que los padres obtiene Identificación del niño, envía la siguiente consulta o espera hasta que se ejecutarán othe consultas de trozo. actualizaciones de datos se activan de la misma manera como en el original.

Más información:

Otros consejos

gran base de datos

Hemos actualizado (30-60gb) y tenía la carrera proceso de actualización de hasta 10 horas. Creo que el mejor enfoque consiste en primer lugar todo lo limpio que pueda. Voy a adjuntar el script limpia completa al final.

El siguiente punto que estamos utilizando es un Magerun. Esto permite que el ugprade a ejecutar desde la línea de comandos. Un 20gb limpiado DB toma alrededor de 6 horas para actualizar en un Dell 2950 (2x4core, 16gb mem)

Tengo experiencia lentos tiempos de actualización de servidores, principalmente debido al tiempo de I / O lento, recomiendo el uso de hardware local.

Piense acerca de la optimización que my.cnf, así que asegúrese de que tiene suficientes recursos disponibles para la actualización, a continuación, vuelva si es necesario.

Aquí es un script limpia completa -. Muchas de las tablas son de diferente versión de Magento y no existe, simplemente comentar que si me sale un error de SQL

SET foreign_key_checks = 0;
truncate dataflow_batch_export;
truncate dataflow_batch_import;
truncate log_customer;
truncate log_quote;
truncate log_summary;
truncate log_summary_type;
truncate log_url;
truncate log_url_info;
truncate log_visitor;
truncate log_visitor_info;
truncate log_visitor_online; 
truncate adminnotification_inbox;
;reports
truncate report_viewed_product_index;
truncate report_compared_product_index;
truncate report_event;
;These may not be in the system
;truncate report_viewed_product_aggregated_monthly;
;truncate report_viewed_product_aggregated_daily;
;truncate report_viewed_product_aggregated_yearly;
;send a friend
truncate sendfriend_log;
;core logs
truncate core_cache;
;truncate core_url_rewrite;
;delete quotes
;truncate sales_flat_quote_shipping_rate;
;truncate sales_flat_quote_payment;
;truncate sales_flat_quote_item_option;
;truncate sales_flat_quote_item;
;truncate sales_flat_quote_address_item;
;truncate sales_flat_quote_address;
;truncate sales_flat_quote;
;truncate index tables
;truncate catalog_product_index_eav;
;truncate catalog_product_index_eav_decimal;
;truncate catalog_product_index_eav_decimal_idx;
;truncate catalog_product_index_eav_idx;
;truncate catalog_product_index_price;
;truncate catalog_product_index_price_bndl_opt;
;truncate catalog_product_index_price_bndl_sel;
;truncate catalog_product_index_price_bundle;
;truncate catalog_product_index_price_downloadable_idx;
;truncate catalog_product_index_price_final_idx;
;truncate catalog_product_index_price_idx;
;truncate catalog_product_index_price_idx_cfg_opt_aggregate;
;truncate catalog_product_index_price_idx_cfg_option;
;truncate catalog_product_index_price_idx_option;
;truncate catalog_product_index_price_idx_option_aggregate;
;truncate catalog_product_index_tier_price;
;truncate catalog_product_index_website;
;truncate catalogindex_aggregation;
;truncate catalogindex_aggregation_tag;
;truncate catalogindex_aggregation_to_tag;
;truncate catalogindex_eav;
;truncate catalogindex_minimal_price;
;truncate catalogindex_price;
;truncate catalog_product_index_eav_decimal_idx;
;truncate catalog_product_index_eav_decimal_tmp;
;truncate catalog_product_index_eav_idx;
;truncate catalog_product_index_eav_tmp;
;truncate catalog_product_index_price_bundle_idx;
;truncate catalog_product_index_price_bundle_opt_idx;
;truncate catalog_product_index_price_bundle_opt_tmp;
;truncate catalog_product_index_price_bundle_sel_idx;
;truncate catalog_product_index_price_bundle_sel_tmp;
;truncate catalog_product_index_price_bundle_tmp;
;truncate catalog_product_index_price_cfg_opt_agr_idx;
;truncate catalog_product_index_price_cfg_opt_agr_tmp;
;truncate catalog_product_index_price_cfg_opt_idx;
;truncate catalog_product_index_price_cfg_opt_tmp;
;truncate catalog_product_index_price_downlod_idx;
;truncate catalog_product_index_price_downlod_tmp;
;truncate catalog_product_index_price_final_idx;
;truncate catalog_product_index_price_final_tmp;
;truncate catalog_product_index_price_idx;
;truncate catalog_product_index_price_opt_agr_idx;
;truncate catalog_product_index_price_opt_agr_tmp;
;truncate catalog_product_index_price_opt_idx;
;truncate catalog_product_index_price_opt_tmp;

;truncate catalog_category_anc_categs_index_idx;
;truncate catalog_category_anc_categs_index_tmp;
;truncate catalog_category_anc_products_index_idx;
;truncate catalog_category_anc_products_index_tmp;
;truncate catalog_category_product_index_enbl_idx;
;truncate catalog_category_product_index_enbl_tmp;
;truncate catalog_category_product_index_idx;
;truncate catalog_category_product_index_tmp;

;truncate catalog_product_bundle_price_index;
;truncate catalog_product_bundle_stock_index;
;truncate catalog_product_enabled_index;

;truncate cataloginventory_stock_status_idx;
;truncate cataloginventory_stock_status_tmp;
truncate index_event;
truncate index_process;
truncate index_process_event;
;drop 
;drop table catalog_category_flat_store_1;
;drop table catalog_product_flat_1;

;M2E Items
truncate m2epro__backup_ebay_listings_logs;
truncate m2epro__backup_ebay_orders_logs;
truncate m2epro__backup_listings_logs;
truncate m2epro__backup_synchronizations_logs;
truncate m2epro_listing_log;
truncate m2epro_listing_other_log;
truncate m2epro_synchronization_log;
truncate magemonkey_api_debug;

SET foreign_key_checks = 1;

Siempre hemos errado en el lado de la precaución cuando se actualiza "grandes" tiendas de EE y los terminó fuera de horas en el modo estándar (es decir. El modo de mantenimiento para el sitio en vivo, base de tema / plantilla, desactivar todos los módulos, actualizar usando mage).

También suele iniciar la actualización por duplicado (es decir, en dos servidores / ambientes separados.); simplemente porque tenemos el recurso del servidor para hacerlo -. y nos da un poco de memoria intermedia (. es decir, no tener que volver a iniciar el proceso), si sucede que hay un error "extraño"

copy to tmp table puede ser combatido mediante el aumento de la tmp_table_size en consecuencia y utilizando un tmpfs montado DIR para el disco MySQL tmp, siempre que no utiliza DISTINCT

Hemos siempre jugó con la idea de hacer cola comandos, que agrupa a las consultas y de comprometerse en 1 solo golpe -., Pero el potencial de error es demasiado vasto

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top