Quindi ho questa tabella di controllo (tiene traccia delle azioni su qualsiasi tabella nel mio database):
CREATE TABLE `track_table` (
`id` int(16) unsigned NOT NULL,
`userID` smallint(16) unsigned NOT NULL,
`tableName` varchar(255) NOT NULL DEFAULT '',
`tupleID` int(16) unsigned NOT NULL,
`date_insert` datetime NOT NULL,
`action` char(12) NOT NULL DEFAULT '',
`className` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `userID` (`userID`),
KEY `tableID` (`tableName`,`tupleID`,`date_insert`),
KEY `actionDate` (`action`,`date_insert`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
e ho bisogno di iniziare ad archiviare oggetti obsoleti. La tabella è cresciuta fino a circa 50 milioni di righe, quindi il modo più veloce che ho potuto eliminare le righe era di eliminarlo una tabella alla volta (basato su tableName
).
Funziona abbastanza bene ma su alcuni dei tavoli che sono pesanti da scrivere, non si completa. La mia query elimina tutti gli elementi a cui è associata delete
un'azione in una combinazione tupleID / tableName:
DELETE FROM track_table WHERE tableName='someTable' AND tupleID IN (
SELECT DISTINCT tupleID FROM track_table
WHERE tableName='someTable' AND action='DELETE' AND date_insert < DATE_SUB(CURDATE(), INTERVAL 30 day)
)
Ho lasciato correre questo sul mio server per 3 giorni e non è mai stato completato per la tabella più grande. L'output di spiegazione (se cambio la cancellazione per selezionare:
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
| 1 | PRIMARY | track_table | ref | tableID | tableID | 257 | const | 3941832 | Using where |
| 2 | DEPENDENT SUBQUERY | track_table | ref | tableID,actionDate | tableID | 261 | const,func | 1 | Using where; Using temporary |
Quindi 4 milioni di righe non dovrebbero richiedere 3 giorni per essere eliminate, penso. Ho innodb_buffer_pool_size impostato su 3 GB e il server non è impostato per utilizzare one_file_per_table. In quali altri modi posso migliorare le prestazioni di eliminazione di InnoDB? (Esecuzione di MySQL 5.1.43 su Mac OSX)