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
** [] db1105
** [x] db2085 - table compressed
** [x] db2088 - table compressed
[] s2
** [] db1103
** [] db1105
** [x] db2088 - table compressed
** [x] db2091 (idwiki,plwiki,ptwiki,zhwiki need compression)
[X] s3 - no partitions
[] s4
** [] db1097
** [] db1103
** [x] db2084 - table compressed
** [x] db2091 - table compressed
[x] s5
** [x] db1096 - table compressed
** [x] db1097 - table compressed
** [x] db2084 - table compressed
** [x] db2089 - table compressed
[x] s6
** [x] db1096 - table compressed
** [x] db1098 - table compressed
** [x] db2087 - table compressed
** [x] db2089 - table compressed
[] s7
** [] db1098
** [] db1101
** [x] db2086 - table compressed
** [x] db2087 - table compressed
[] s8
** [] db1099
** [] db1101
** [x] db2085 - table compressed
** [x] db2086 - table compressed