J'ai lancé une requête pour ajouter une colonne à une table en faisant correspondre l'ID d'une autre table. Les deux ont environ 600 millions de lignes donc c'est raisonnable que cela prenne un certain temps, mais ce qui m'inquiète, c'est qu'il y a des vitesses de lecture élevées (~ 500MB/s) sur le disque mais sqlite écrit 0B/s selon iotop
. La taille de fichier sur mon fichier .db n'a pas changé en heures, mais l'ajout d'une colonne à une table de 600 millions de lignes doit changer AU MOINS un octet, non?La lecture haute mais absolument aucune écriture sur la requête SQLite normal?
Est-ce un comportement normal de SQLite? La machine est assez puissante, Ubuntu 16 sur i7 quad core avec 64 Go de RAM et NVMe SSD. Les requêtes et le schéma de la table sont ci-dessous.
ALTER TABLE tableA ADD address TEXT;
UPDATE tableA SET address = (SELECT address FROM tableB WHERE tableA.ID = tx_out.ID);
Table schema:
CREATE TABLE tableA (
ID TEXT,
column1 INT,
column2 TEXT,
);
CREATE TABLE tx_out (
ID TEXT,
sequence INT,
address TEXT
);
écrit peut-être dans le journal des transactions en premier? [WAL] (https://sqlite.org/wal.html) – lad2025
@ lad2025 pourrait être, j'ai trouvé un fichier -journal par ce document https://sqlite.org/tempfiles.html mais c'est seulement 25KB, est-ce normal pour une transaction aussi importante? – jamzsabb