Special slaves are on the big wikis for the logging table an specific PK and partitions.
It has been tested that a normal slave (non partitioned) performs fine for the logpager and contributions service: T223151#5506269
There was just one query that was choosing the wrong index (most likely due to an optimizer misbehaviour) which required a workaround in code: https://gerrit.wikimedia.org/r/#/c/mediawiki/core/+/538326/
The current table looks like:
CREATE TABLE `logging` ( `log_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `log_type` varbinary(32) NOT NULL DEFAULT '', `log_action` varbinary(32) NOT NULL DEFAULT '', `log_timestamp` varbinary(14) NOT NULL DEFAULT '19700101000000', `log_user` int(10) unsigned NOT NULL DEFAULT '0', `log_namespace` int(11) NOT NULL DEFAULT '0', `log_title` varbinary(255) NOT NULL DEFAULT '', `log_comment` varbinary(255) NOT NULL DEFAULT '', `log_comment_id` bigint(20) unsigned NOT NULL DEFAULT '0', `log_params` blob NOT NULL, `log_deleted` tinyint(3) unsigned NOT NULL DEFAULT '0', `log_user_text` varbinary(255) NOT NULL DEFAULT '', `log_actor` bigint(20) unsigned NOT NULL DEFAULT '0', `log_page` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`log_id`,`log_user`), KEY `type_time` (`log_type`,`log_timestamp`), KEY `user_time` (`log_user`,`log_timestamp`), KEY `page_time` (`log_namespace`,`log_title`,`log_timestamp`), KEY `times` (`log_timestamp`), KEY `log_page_id_time` (`log_page`,`log_timestamp`), KEY `log_user_type_time` (`log_user`,`log_type`,`log_timestamp`), KEY `actor_time` (`log_actor`,`log_timestamp`), KEY `log_actor_type_time` (`log_actor`,`log_type`,`log_timestamp`), KEY `log_type_action` (`log_type`,`log_action`,`log_timestamp`), KEY `log_user_text_type_time` (`log_user_text`,`log_type`,`log_timestamp`), KEY `log_user_text_time` (`log_user_text`,`log_timestamp`) ) ENGINE=InnoDB AUTO_INCREMENT=102192510 DEFAULT CHARSET=binary ROW_FORMAT=COMPRESSED /*!50100 PARTITION BY RANGE (log_user) (PARTITION p1 VALUES LESS THAN (1) ENGINE = InnoDB, PARTITION p50000 VALUES LESS THAN (50000) ENGINE = InnoDB, PARTITION p100000 VALUES LESS THAN (100000) ENGINE = InnoDB, PARTITION p200000 VALUES LESS THAN (200000) ENGINE = InnoDB, PARTITION p300000 VALUES LESS THAN (300000) ENGINE = InnoDB, PARTITION p400000 VALUES LESS THAN (400000) ENGINE = InnoDB, PARTITION p500000 VALUES LESS THAN (500000) ENGINE = InnoDB, PARTITION p750000 VALUES LESS THAN (750000) ENGINE = InnoDB, PARTITION p1000000 VALUES LESS THAN (1000000) ENGINE = InnoDB, PARTITION p1250000 VALUES LESS THAN (1250000) ENGINE = InnoDB, PARTITION p1500000 VALUES LESS THAN (1500000) ENGINE = InnoDB, PARTITION p1750000 VALUES LESS THAN (1750000) ENGINE = InnoDB, PARTITION p2000000 VALUES LESS THAN (2000000) ENGINE = InnoDB, PARTITION p2500000 VALUES LESS THAN (2500000) ENGINE = InnoDB, PARTITION p3000000 VALUES LESS THAN (3000000) ENGINE = InnoDB, PARTITION p3500000 VALUES LESS THAN (3500000) ENGINE = InnoDB, PARTITION p4000000 VALUES LESS THAN (4000000) ENGINE = InnoDB, PARTITION p4500000 VALUES LESS THAN (4500000) ENGINE = InnoDB, PARTITION p5000000 VALUES LESS THAN (5000000) ENGINE = InnoDB, PARTITION p6000000 VALUES LESS THAN (6000000) ENGINE = InnoDB, PARTITION p7000000 VALUES LESS THAN (7000000) ENGINE = InnoDB, PARTITION p7500000 VALUES LESS THAN (7500000) ENGINE = InnoDB, PARTITION p8000000 VALUES LESS THAN (8000000) ENGINE = InnoDB, PARTITION p9000000 VALUES LESS THAN (9000000) ENGINE = InnoDB, PARTITION p10000000 VALUES LESS THAN (10000000) ENGINE = InnoDB, PARTITION p11000000 VALUES LESS THAN (11000000) ENGINE = InnoDB, PARTITION p12000000 VALUES LESS THAN (12000000) ENGINE = InnoDB, PARTITION p13000000 VALUES LESS THAN (13000000) ENGINE = InnoDB, PARTITION p14000000 VALUES LESS THAN (14000000) ENGINE = InnoDB, PARTITION p16000000 VALUES LESS THAN (16000000) ENGINE = InnoDB, PARTITION p18000000 VALUES LESS THAN (18000000) ENGINE = InnoDB, PARTITION p22000000 VALUES LESS THAN (22000000) ENGINE = InnoDB, PARTITION p24000000 VALUES LESS THAN (24000000) ENGINE = InnoDB, PARTITION p28000000 VALUES LESS THAN (28000000) ENGINE = InnoDB, PARTITION pMAXVALUE VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
And it should look like:
CREATE TABLE `logging` ( `log_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `log_type` varbinary(32) NOT NULL DEFAULT '', `log_action` varbinary(32) NOT NULL DEFAULT '', `log_timestamp` varbinary(14) NOT NULL DEFAULT '19700101000000', `log_user` int(10) unsigned NOT NULL DEFAULT '0', `log_namespace` int(11) NOT NULL DEFAULT '0', `log_title` varbinary(255) NOT NULL DEFAULT '', `log_comment` varbinary(255) NOT NULL DEFAULT '', `log_comment_id` bigint(20) unsigned NOT NULL DEFAULT '0', `log_params` blob NOT NULL, `log_deleted` tinyint(3) unsigned NOT NULL DEFAULT '0', `log_user_text` varbinary(255) NOT NULL DEFAULT '', `log_actor` bigint(20) unsigned NOT NULL DEFAULT '0', `log_page` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`log_id`), KEY `type_time` (`log_type`,`log_timestamp`), KEY `user_time` (`log_user`,`log_timestamp`), KEY `page_time` (`log_namespace`,`log_title`,`log_timestamp`), KEY `times` (`log_timestamp`), KEY `log_page_id_time` (`log_page`,`log_timestamp`), KEY `log_user_text_time` (`log_user_text`(16),`log_timestamp`), KEY `log_user_type_time` (`log_user`,`log_type`,`log_timestamp`), KEY `actor_time` (`log_actor`,`log_timestamp`), KEY `log_actor_type_time` (`log_actor`,`log_type`,`log_timestamp`), KEY `log_type_action` (`log_type`,`log_action`,`log_timestamp`), KEY `log_user_text_type_time` (`log_user_text`,`log_type`,`log_timestamp`) ) ENGINE=InnoDB AUTO_INCREMENT=102192535 DEFAULT CHARSET=binary
Once that code fix is deployed, the special slaves on big wikis on codfw should get the following alters:
ALTER TABLE logging REMOVE PARTITIONING; ALTER TABLE logging DROP PRIMARY KEY, ADD PRIMARY KEY (log_id); ALTER TABLE logging ROW_FORMAT=COMPRESSED, KEY_BLOCK_SIZE=8, ALGORITHM=COPY;
- s1
- db1099 - table compressed
- db1105 - table compressed
- db2085 - table compressed
- db2088 - table compressed
- s2
- db1103 - table compressed
- db1105 - table compressed
- db2088 - table compressed
- db2091 - table compressed
- s3 - no partitions
- s4
- db1097 - table compressed
- db1103 - table compressed
- db2084 - table compressed
- db2091 - table compressed
- s5
- db1096 - table compressed
- db1097 - table compressed
- db2084 - table compressed
- db2089 - table compressed
- s6
- db1096 - table compressed
- db1098 - table compressed
- db2087 - table compressed
- db2089 - table compressed
- s7
- db1098 - table compressed
- db1101 - table compressed
- db2086 - table compressed
- db2087 - table compressed
- s8
- db1099 - table compressed
- db1101 - table compressed
- db2085 - table compressed
- db2086 - table compressed