- Stato
- Risolto
- Risolto in
- 2.3.8
Panoramica del problema
A partire dalla versione 2.3.0 del plugin WPML Media Translation, è possibile tradurre e sincronizzare i media tra le traduzioni.
Come parte del processo di configurazione (che viene eseguito anche quando effettui la migrazione da una versione precedente), WPML Media scansiona l’intero sito alla ricerca degli URL dei media utilizzati nel contenuto.
Contrassegnare gli articoli che contengono media è utile in seguito, così, in occasione di determinati eventi relativi alla traduzione dei media (come la traduzione di un determinato articolo con media), verranno scansionati solo gli articoli che includono effettivamente dei media, al fine di aggiornare il contenuto con i media tradotti.
Tuttavia, per i siti molto grandi, il processo di configurazione può esercitare una certa pressione sul database, rendendo l’intero processo più lento del previsto.
Per la maggior parte, il carico è causato dalle query necessarie per identificare gli ID degli allegati in base agli URL. Normalmente, l’ID dell’allegato può essere determinato dagli attributi di un tag HTML (ad es. id=”attachment_8” – qui, 8 è l’ID dell’allegato). Quando tale attributo non viene utilizzato, WPML Media determina l’ID dall’URL effettivo. In questo caso, vengono utilizzati due tipi di query:
- Una query che cerca una corrispondenza con il campo ‘guid’ nella tabella wp_posts
- Un’altra query che cerca una corrispondenza con i campi meta_value della tabella wp_postmeta.
Nessuno di questi campi della tabella, tuttavia, è indicizzato di default. Trattandosi di una corrispondenza di testo (anche se non di una ricerca testuale parziale), per i database di grandi dimensioni l’operazione può risultare lenta.
Soluzione alternativa
Un modo per aggirare questo problema è aggiungere (almeno temporaneamente) degli indici per questi campi.
Puoi farlo usando due query SQL come le seguenti:
ALTER TABLE `wp_posts` ADD INDEX `guid` (`guid`);
ALTER TABLE `wp_postmeta` ADD INDEX `meta_value` (`meta_value`(512));
Queste aggiunte non dovrebbero avere alcun effetto collaterale sul tuo database, se non quello di aumentarne leggermente le dimensioni fisiche sul disco. Se preferisci annullarle dopo aver eseguito la configurazione di WPML Media, puoi farlo usando le seguenti due query MySQL:
ALTER TABLE `wp_posts` DROP INDEX `guid`;
ALTER TABLE `wp_postmeta` DROP INDEX `meta_value`;
Nota: il prefisso wp_ per le tabelle menzionate nelle query può essere diverso in base alla tua configurazione di WordPress. Di solito e per impostazione predefinita, è wp_
Esempio di caso di studio: su un sito con circa 140.000 allegati e circa 5.000 articoli, la configurazione può richiedere più di 30 minuti per essere completata. Dopo aver aggiunto gli indici, la configurazione viene eseguita in un paio di minuti. I test sono stati effettuati su un normale ambiente di sviluppo. Questi valori possono essere ancora più favorevoli su un server di produzione reale.