Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-4143

SELECT COUNT(*) is slower using XtraDB than InnoDB plugin

    XMLWordPrintable

Details

    Description

      On a test database with 10m rows, with the exact same config, it takes about 10-15% longer to perform a "SELECT COUNT(*) FROM table;" on an InnoDB table having 10m rows.

      Launch arguments : /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --open-files-limit=60000 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306

      The my.cnf :

      [mysqld]
      skip-external-locking
      max_connections        = 250
      connect_timeout        = 5
      wait_timeout        = 600
      max_allowed_packet    = 1G
      thread_cache_size       = 128
      sort_buffer_size    = 4M
      bulk_insert_buffer_size    = 64M
      max_heap_table_size    = 64M
      tmp_table_size        = 64M
      myisam_recover        = BACKUP
      key_buffer_size        = 8M
      open-files-limit    = 60000
      table_open_cache    = 8000
      table_definition_cache    = 8000
      myisam_sort_buffer_size    = 128M
      concurrent_insert    = 2
      read_rnd_buffer_size    = 128M
      query_cache_size        = 0
      query_cache_type        = OFF
      log_warnings        = 2
      slow_query_log        = 0
      long_query_time        = 4
      expire_logs_days    = 10
      max_binlog_size         = 150M
      default_storage_engine    = InnoDB
      innodb_log_file_size    = 2000M
      innodb_buffer_pool_size    = 10G
      innodb_log_buffer_size    = 16M
      innodb_file_per_table    = 1
      delay_key_write        = ON
      innodb_buffer_pool_instances    = 8
      skip-name-resolve
      innodb_autoinc_lock_mode    = 2
      event_scheduler        = off
      group_concat_max_len    = 5000
      innodb_file_format    = Barracuda

      And here is the table structure :

      CREATE TABLE `subscribers` (
        `subscriber_hash` varchar(8) NOT NULL,
        `subscriber_id` int(11) NOT NULL,
        `timestamp` datetime NOT NULL,
        `lastname` varchar(100) DEFAULT NULL,
        `firstname` varchar(100) DEFAULT NULL,
        `title` varchar(3) DEFAULT NULL,
        `creation_date` datetime DEFAULT NULL,
        `date_activation` datetime DEFAULT NULL,
        `birthdate` date DEFAULT NULL,
        `birthyear` int(4) DEFAULT NULL,
        `zipcode` varchar(10) DEFAULT NULL,
        `city` varchar(100) DEFAULT NULL,
        `country` varchar(100) DEFAULT NULL,
        `country_code` varchar(2) DEFAULT NULL,
        `cached_contract_id` int(11) DEFAULT NULL,
        `ISP` varchar(20) DEFAULT NULL,
        `isp_domain` varchar(96) DEFAULT NULL,
        `subscriber_cnt` int(4) DEFAULT NULL,
        PRIMARY KEY (`subscriber_hash`,`subscriber_id`,`timestamp`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8


      On a dry run on a Maria server that is only having this table on it and that is only running this test, on a system that has no real load while performing the tests, with XtraDB :

      # time mysql test_database -e "SELECT COUNT(*) FROM subscribers;" && time mysql test_database -e "SELECT COUNT(*) FROM subscribers;" && time mysql test_database -e "SELECT COUNT(*) FROM subscribers;"
      +----------+
      | count(*) |
      +----------+
      | 10000000 |
      +----------+
       
      real	0m3.052s
      user	0m0.000s
      sys	0m0.010s
      +----------+
      | count(*) |
      +----------+
      | 10000000 |
      +----------+
       
      real	0m2.966s
      user	0m0.000s
      sys	0m0.000s
      +----------+
      | count(*) |
      +----------+
      | 10000000 |
      +----------+
       
      real	0m2.989s
      user	0m0.000s
      sys	0m0.000s


      With InnoDB plugin loaded instead of XtraDB (similar results are achieved when ran on MySQL 5.5.29) :

      # time mysql test_database -e "SELECT COUNT(*) FROM subscribers;" && time mysql test_database -e "SELECT COUNT(*) FROM subscribers;" && time mysql test_database -e "SELECT COUNT(*) FROM subscribers;"
      +----------+
      | count(*) |
      +----------+
      | 10000000 |
      +----------+
       
      real	0m2.727s
      user	0m0.000s
      sys	0m0.000s
      +----------+
      | count(*) |
      +----------+
      | 10000000 |
      +----------+
       
      real	0m2.758s
      user	0m0.000s
      sys	0m0.000s
      +----------+
      | count(*) |
      +----------+
      | 10000000 |
      +----------+
       
      real	0m2.729s
      user	0m0.000s
      sys	0m0.000s

      Attachments

        Activity

          People

            axel Axel Schwenke
            jb-boin Jean Weisbuch
            Votes:
            1 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.