title: MYSQL High CPU Usage and slow queries
body: <p>I have a problem with slow queries during high mysql load. This happens when I import products to woocoomerce using WP All Import. CPU and Memory load during import:</p>
  
  <p>TOP command:</p>
  
  <p><img src="https://i.stack.imgur.com/V2K8M.png" alt="TOP command"></p>
  
  <p>Sample Query before import:</p>
  
  <pre><code>SELECT  SQL_CALC_FOUND_ROWS hm_posts.ID
      FROM  hm_posts
      WHERE  1=1
        AND  ( ( hm_posts.ID NOT IN (
                          SELECT  object_id
                              FROM  hm_term_relationships
                              WHERE  term_taxonomy_id IN (7) ) ) 
             )
        AND  hm_posts.post_type = 'product'
        AND  (hm_posts.post_status = 'publish'
                OR  hm_posts.post_status = 'private'
             )
      GROUP BY  hm_posts.ID
      ORDER BY  hm_posts.post_date DESC
      LIMIT  0, 10 
  </code></pre>
  
  <p>The query took 0.0095 seconds.</p>
  
  <p>The same query when importing:</p>
  
  <pre><code>SELECT SQL_CALC_FOUND_ROWS hm_posts.ID FROM hm_posts WHERE 1=1 AND ( ( hm_posts.ID NOT IN ( SELECT object_id FROM hm_term_relationships WHERE term_taxonomy_id IN (7) ) ) ) AND hm_posts.post_type = 'product' AND (hm_posts.post_status = 'publish' OR hm_posts.post_status = 'private') GROUP BY hm_posts.ID ORDER BY hm_posts.post_date DESC LIMIT 0, 10
  </code></pre>
  
  <p>The query took 0.0174 seconds.</p>
  
  <p>So time has been increased by almost 100%. My whole site loads about 40% slower and CPU usage is only about 45%. I guess it shouldn't be like that?</p>
  
  <p>my.cnf settings:</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
  <div class="snippet-code">
  <pre class="snippet-code-css lang-css prettyprint-override"><code>[mysqld]
  #
  # * Basic Settings
  #
  user  = mysql
  pid-file = /var/run/mysqld/mysqld.pid
  socket  = /var/run/mysqld/mysqld.sock
  port  = 3306
  basedir  = /usr
  datadir  = /var/lib/mysql
  tmpdir  = /tmp
  lc_messages_dir = /usr/share/mysql
  lc_messages = en_US
  skip-external-locking
  #
  # Instead of skip-networking the default is now to listen only on
  # localhost which is more compatible and is not less secure.
  bind-address  = 0.0.0.0
  #
  # * Fine Tuning
  #
  max_connections  = 200
  connect_timeout  = 5
  wait_timeout  = 600
  max_allowed_packet = 32M
  thread_cache_size       = 128
  sort_buffer_size = 4M
  bulk_insert_buffer_size = 16M
  tmp_table_size  = 32M
  max_heap_table_size = 32M
  #
  # * MyISAM
  #
  # This replaces the startup script and checks MyISAM tables if needed
  # the first time they are touched. On error, make copy and try a repair.
  myisam_recover_options = BACKUP
  key_buffer_size  = 128M
  #open-files-limit = 2000
  table_open_cache = 800
  myisam_sort_buffer_size = 512M
  concurrent_insert = 2
  read_buffer_size = 2M
  read_rnd_buffer_size = 1M
  #
  # * Query Cache Configuration
  #
  
  #
  # * Logging and Replication
  #
  # Both location gets rotated by the cronjob.
  # Be aware that this log type is a performance killer.
  # As of 5.1 you can enable the log at runtime!
  #general_log_file        = /var/log/mysql/mysql.log
  #general_log             = 1
  #
  # Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
  #
  # we do want to know about network errors and such
  log_warnings  = 2
  #
  # Enable the slow query log to see queries with especially long duration
  #slow_query_log[={0|1}]
  slow_query_log_file = /var/log/mysql/mariadb-slow.log
  long_query_time = 10
  #log_slow_rate_limit = 1000
  log_slow_verbosity = query_plan
  
  #log-queries-not-using-indexes
  #log_slow_admin_statements
  #
  # The following can be used as easy to replay backup logs or for replication.
  # note: if you are setting up a replication slave, see README.Debian about
  #       other settings you may need to change.
  #server-id  = 1
  #report_host  = master1
  #auto_increment_increment = 2
  #auto_increment_offset = 1
  log_bin   = /var/log/mysql/mariadb-bin
  log_bin_index  = /var/log/mysql/mariadb-bin.index
  # not fab for performance, but safer
  #sync_binlog  = 1
  expire_logs_days = 10
  max_binlog_size         = 100M
  # slaves
  #relay_log  = /var/log/mysql/relay-bin
  #relay_log_index = /var/log/mysql/relay-bin.index
  #relay_log_info_file = /var/log/mysql/relay-bin.info
  #log_slave_updates
  #read_only
  #
  # If applications support it, this stricter sql_mode prevents some
  # mistakes like inserting invalid dates etc.
  #sql_mode  = NO_ENGINE_SUBSTITUTION,TRADITIONAL
  #
  # * InnoDB
  #
  # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
  # Read the manual for more InnoDB related options. There are many!
  default_storage_engine = InnoDB
  innodb_buffer_pool_size = 256M
  innodb_log_buffer_size = 8M
  innodb_file_per_table = 1
  innodb_open_files = 800
  innodb_io_capacity = 50
  innodb_flush_method = O_DIRECT
  innodb_flush_log_at_trx_commit=0
  innodb_thread_concurrency=0
  
  #
  # * Security Features
  #
  # Read the manual, too, if you want chroot!
  # chroot = /var/lib/mysql/
  #
  # For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
  #
  # ssl-ca=/etc/mysql/cacert.pem
  # ssl-cert=/etc/mysql/server-cert.pem
  # ssl-key=/etc/mysql/server-key.pem
  
  #
  # * Galera-related settings
  #
  [galera]
  # Mandatory settings
  #wsrep_on=ON
  #wsrep_provider=
  #wsrep_cluster_address=
  #binlog_format=row
  #default_storage_engine=InnoDB
  #innodb_autoinc_lock_mode=2
  #
  # Allow server to accept connections on all interfaces.
  #
  #bind-address=0.0.0.0
  #
  # Optional setting
  #wsrep_slave_threads=1
  
  [mysqldump]
  quick
  quote-names
  max_allowed_packet = 32M
  
  [mysql]
  #no-auto-rehash # faster start of mysql but no tab completion
  
  [isamchk]
  key_buffer  = 32M
  
  #
  # * IMPORTANT: Additional settings that can override those from this file!
  #   The files must end with '.cnf', otherwise they'll be ignored.
  #
  !includedir /etc/mysql/conf.d/</code></pre>
  </div>
  </div>
  </p>
  
  <p>How should I optimize mysql to load queries normally?</p>