If you have a slow import, or if you're running into a lot of server timeouts, then you can follow these steps to optimize your import.
Follow all of the steps listed here: http://www.wpallimport.com/documentation/troubleshooting/slow-imports/.
There are some settings in WP All Import that you might need but will cause slowness. Depending on what you're importing it may be impossible to change these, but if you're able to then it will help.
Scan through post content and import images wrapped in <img> tags -> Disable this to increase speed (All Import -> Edit Import -> Images).
Search through the Media Library for existing images before importing new images & Keep images currently in Media Library -> Enable these to increase speed in subsequent runs of the import (All Import -> Edit Import -> Images).
Don't check for duplicate SKUs -> Enable this to increase speed (All Import -> Edit Import -> WooCommerce Add-On -> Add-On Options).
Use StreamReader instead of XMLReader to parse import file -> Disable this to increase speed (All Import -> Import Settings -> Configure Advanced Settings). Make sure to test your feed/file in a new import to confirm that it still works right with this disabled.
Increase speed by disabling do_action calls in wp_insert_post during import -> Enable this to increase speed (All Import -> Import Settings -> Configure Advanced Settings). Make sure to check your imported posts and confirm that they're correct with this setting enabled.
When using Manual Record Matching (see documentation) the fastest and most versatile option is "Post ID". If you don't have the Post ID in your file, you can use a custom PHP function to find the ID: see documentation.
As an example, if you're updating WooCommerce products and you're using these settings: https://d.pr/i/XzCxWm, you can switch to Post ID and use this function to greatly increase the speed of the import:
[wc_get_product_id_by_sku({sku[1]})]See: https://d.pr/i/tDncIB.
Before you clean up your database, it's extremely important to make a back up that you can roll back to. After you've made a back up, you can use one of the following plugins to clear transients and orphaned data:
- WP Sweep: https://wordpress.org/plugins/wp-sweep/.
- WP Optimize: https://wordpress.org/plugins/wp-optimize/.
If you're using a plugin like EWWW Image Optimizer, or Smush Pro, you should disable them before you start your import. These types of plugins can cause the imports to run extremely slowly.
If other plugins (or your theme) are running a lot of do_action calls during the import, it could cause things to crawl. Check this by running a full conflict test: http://www.wpallimport.com/documentation/troubleshooting/plugin-theme-conflicts/.
Here's a detailed guide on troubleshooting a slow WordPress install in general: https://carlalexander.ca/troubleshoot-wordpress-performance/.
If the import is causing your server to max out its resources (CPU/Memory), the import will run extremely slowly. Sometimes the only way to fix this is to upgrade your server, but it's possible that changing some settings in WP All Import could help.
These are the things that increase CPU/Memory usage:
- Low number of records per iteration (see: https://d.pr/i/Vakkd3).
- Huge amount of images.
- Huge amount of taxonomy terms per record (categories/tags/product attributes/etc).
- Huge amount of variations per product (in a WooCommerce import).
To remedy some of these issues, you can:
- Enable 'Increase speed by disabling do_action calls in wp_insert_post during import.' option in the Import Settings (see: https://d.pr/i/c8LRQ).
- Increase 'In each iteration, process X records' to at least 20 records.
- Disable 'Split file up into X record chunks' option (see: https://d.pr/i/RpqLTm).
- Remove the images/taxonomies/etc in the main import, then set up a separate import that only imports those items: http://www.wpallimport.com/documentation/recurring/manual-record-matching/.
Once you've done everything listed above, you can try increasing the records per iteration via the Import Settings to speed things up: https://d.pr/i/Vakkd3. The higher you can set this, the faster the import will run.
If you set the records per iteration higher and the server terminates the import, you can work with your web host to find the error in the logs on your server to see what's causing the termination and fix it: https://gist.github.com/mbissett/d98d1acdf4b2ba11bc67d6f652d4497c.
Some common problem areas are:
- (Server) CPU Usage
- (Server) Memory Usage
- (PHP) max_execution_time
- (PHP) FcgidIOTimeout
- (PHP) mysql.connect_timeout
- (PHP) default_socket_timeout
- (MySQL) wait_timeout
- (MySQL) interactive_timeout
The web host and server you choose will have a direct impact on the speed of your imports. If you're trying to import a lot of data on a bad server, it's going to be slow no matter what you do. If you follow all of the steps above and nothing increases the speed, try switching to a good web host like one of the following:
- SiteGround
- LiquidWeb
WARNING: Follow these instructions closely or you will end up with many duplicate posts.
On the very first run of your import, if you're sure that there are no duplicate posts in your import file, you can use this method to import your posts very quickly:
- Add the following code in the Function Editor at All Import -> Settings:
add_filter( 'wp_all_import_is_check_duplicates', 'wpai_is_check_duplicates', 10, 2 );
function wpai_is_check_duplicates( $is_check_duplicates, $import_id ) {
return false;
}- Create and/or run your import.
- Very important: remove the above code from the Function Editor. If you do not remove the code then every import will create duplicate posts every time you run them.