NP 1.5 版本 peers 表使用的是 memory 引擎,此引擎不支持行级锁,不抗并发。如果发现锁表较多,MySQL 负载高,建议修改为 InnoDB。
宝塔面板无法直接修改引擎,可以登录 MySQL 控制台,按以下步骤进行。注意请先升级到 1.7.4 或以上,保证你的字段跟以下一致。
1, 创建新表:
CREATE TABLE `peers_new` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`torrent` int(11) unsigned NOT NULL DEFAULT '0',
`peer_id` binary(20) NOT NULL,
`ip` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`port` smallint(5) unsigned NOT NULL DEFAULT '0',
`uploaded` bigint(20) unsigned NOT NULL DEFAULT '0',
`downloaded` bigint(20) unsigned NOT NULL DEFAULT '0',
`to_go` bigint(20) unsigned NOT NULL DEFAULT '0',
`seeder` enum('yes','no') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'no',
`started` datetime DEFAULT NULL,
`last_action` datetime DEFAULT NULL,
`prev_action` datetime DEFAULT NULL,
`connectable` enum('yes','no') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'yes',
`userid` int(11) unsigned NOT NULL DEFAULT '0',
`agent` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`finishedat` int(11) unsigned NOT NULL DEFAULT '0',
`downloadoffset` bigint(20) unsigned NOT NULL DEFAULT '0',
`uploadoffset` bigint(20) unsigned NOT NULL DEFAULT '0',
`passkey` char(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`ipv4` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`ipv6` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `userid` (`userid`),
KEY `idx_torrent_peer` (`torrent`,`peer_id`),
KEY `idx_peer` (`peer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
2, 将旧表数据导入:
insert into peers_new select * from peers;
3, 将旧表改名:
rename table peers to peers_old;
4, 将新表改为 peers:
rename table peers_new to peers;
观察一段时间是否正常,如果正常,可以把 `peers_old` 删除。