Welcome to the forum @Richard_Gerber
I don’t think this affects file listing speed, which I think is all database queries. It might speed other work.
You can see if any of the remote files are being accessed via About → Show log → Live → Information
Can you give an idea of how many are in a folder? Your slowness is in opening specific folders, correct?
One couldn’t reasonably ask for more than yours, but that isn’t proof that it’s sufficient. Can you examine?
This gets kind of complicated, and I’m not expert. I don’t know how good your SQL is, so begin with timing.
Duplicati allows logging of individual SQL statements, and how long each takes. It can make a very big log, or alternatively you can watch the server log at About → Show log → Live → Profiling as it hits a slow spot.
If you see a slow SQL statement, you can note that, but it’s not always clear (especially without good SQL expertise available – any SQL experts out there?) exactly how to go about improving a slow SQL strategy.
Certainly it could be something else, but looking at SQL time is much easier than other things you can do.
Here’s what my output looked like in my usual huge log, kept to help debug in case something goes wrong:
2021-03-08 10:23:24 -05 - [Information-Duplicati.Library.Main.Controller-StartingOperation]: The operation List has started
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Controller-RunList]: Starting - Running List
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteScalarInt64]: Starting - ExecuteScalarInt64: INSERT INTO "Operation" ("Description", "Timestamp") VALUES ("List", 1615217004); SELECT last_insert_rowid();
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteScalarInt64]: ExecuteScalarInt64: INSERT INTO "Operation" ("Description", "Timestamp") VALUES ("List", 1615217004); SELECT last_insert_rowid(); took 0:00:00:00.113
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteReader]: Starting - ExecuteReader: SELECT "ID", "Timestamp" FROM "Fileset" ORDER BY "Timestamp" DESC
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteReader]: ExecuteReader: SELECT "ID", "Timestamp" FROM "Fileset" ORDER BY "Timestamp" DESC took 0:00:00:00.000
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: CREATE TEMPORARY TABLE "Filesets-CFAAD7436E4696408CE483765485681D" AS SELECT DISTINCT "ID" AS "FilesetID", "IsFullBackup" AS "IsFullBackup" , "Timestamp" AS "Timestamp" FROM "Fileset" WHERE "Timestamp" <= 1615214451
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: CREATE TEMPORARY TABLE "Filesets-CFAAD7436E4696408CE483765485681D" AS SELECT DISTINCT "ID" AS "FilesetID", "IsFullBackup" AS "IsFullBackup" , "Timestamp" AS "Timestamp" FROM "Fileset" WHERE "Timestamp" <= 1615214451 took 0:00:00:00.000
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: CREATE INDEX "Filesets-CFAAD7436E4696408CE483765485681D_FilesetIDTimestampIndex" ON "Filesets-CFAAD7436E4696408CE483765485681D" ("FilesetID", "Timestamp" DESC)
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: CREATE INDEX "Filesets-CFAAD7436E4696408CE483765485681D_FilesetIDTimestampIndex" ON "Filesets-CFAAD7436E4696408CE483765485681D" ("FilesetID", "Timestamp" DESC) took 0:00:00:00.000
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteReader]: Starting - ExecuteReader: SELECT DISTINCT "A"."FilesetID", "A"."IsFullBackup", "B"."FileCount", "B"."FileSizes" FROM "Filesets-CFAAD7436E4696408CE483765485681D" A LEFT OUTER JOIN ( SELECT "A"."FilesetID" AS "FilesetID", COUNT(*) AS "FileCount", SUM("C"."Length") AS "FileSizes" FROM "FilesetEntry" A, "File" B, "Blockset" C WHERE "A"."FileID" = "B"."ID" AND "B"."BlocksetID" = "C"."ID" AND "A"."FilesetID" IN (SELECT DISTINCT "FilesetID" FROM "Filesets-CFAAD7436E4696408CE483765485681D") GROUP BY "A"."FilesetID" ) B ON "A"."FilesetID" = "B"."FilesetID" ORDER BY "A"."Timestamp" DESC
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteReader]: ExecuteReader: SELECT DISTINCT "A"."FilesetID", "A"."IsFullBackup", "B"."FileCount", "B"."FileSizes" FROM "Filesets-CFAAD7436E4696408CE483765485681D" A LEFT OUTER JOIN ( SELECT "A"."FilesetID" AS "FilesetID", COUNT(*) AS "FileCount", SUM("C"."Length") AS "FileSizes" FROM "FilesetEntry" A, "File" B, "Blockset" C WHERE "A"."FileID" = "B"."ID" AND "B"."BlocksetID" = "C"."ID" AND "A"."FilesetID" IN (SELECT DISTINCT "FilesetID" FROM "Filesets-CFAAD7436E4696408CE483765485681D") GROUP BY "A"."FilesetID" ) B ON "A"."FilesetID" = "B"."FilesetID" ORDER BY "A"."Timestamp" DESC took 0:00:00:00.023
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: CREATE TEMPORARY TABLE "Filenames-0D9624F40D895144815C696CC3DDA905" ("Path" TEXT NOT NULL)
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: CREATE TEMPORARY TABLE "Filenames-0D9624F40D895144815C696CC3DDA905" ("Path" TEXT NOT NULL) took 0:00:00:00.000
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: INSERT INTO "Filenames-0D9624F40D895144815C696CC3DDA905" SELECT DISTINCT "Path" FROM "File" WHERE "Path" LIKE "C:\PORTABLEAPPS\%"
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: INSERT INTO "Filenames-0D9624F40D895144815C696CC3DDA905" SELECT DISTINCT "Path" FROM "File" WHERE "Path" LIKE "C:\PORTABLEAPPS\%" took 0:00:00:00.007
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: DELETE FROM "Filenames-0D9624F40D895144815C696CC3DDA905" WHERE "Path" NOT IN (SELECT DISTINCT "Path" FROM "File", "FilesetEntry" WHERE "FilesetEntry"."FileID" = "File"."ID" AND "FilesetEntry"."FilesetID" IN (SELECT "FilesetID" FROM "Filesets-CFAAD7436E4696408CE483765485681D") )
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: DELETE FROM "Filenames-0D9624F40D895144815C696CC3DDA905" WHERE "Path" NOT IN (SELECT DISTINCT "Path" FROM "File", "FilesetEntry" WHERE "FilesetEntry"."FileID" = "File"."ID" AND "FilesetEntry"."FilesetID" IN (SELECT "FilesetID" FROM "Filesets-CFAAD7436E4696408CE483765485681D") ) took 0:00:00:00.036
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: CREATE TEMPORARY TABLE "Filenames-271A73A35C151A4E9FCB8667C4270F6B" ("Path" TEXT NOT NULL)
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: CREATE TEMPORARY TABLE "Filenames-271A73A35C151A4E9FCB8667C4270F6B" ("Path" TEXT NOT NULL) took 0:00:00:00.000
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteReader]: Starting - ExecuteReader: SELECT DISTINCT "Path" FROM "Filenames-0D9624F40D895144815C696CC3DDA905"
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteReader]: ExecuteReader: SELECT DISTINCT "Path" FROM "Filenames-0D9624F40D895144815C696CC3DDA905" took 0:00:00:00.000
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: CREATE INDEX "Filenames-271A73A35C151A4E9FCB8667C4270F6B_PathIndex" ON "Filenames-271A73A35C151A4E9FCB8667C4270F6B" ("Path")
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: CREATE INDEX "Filenames-271A73A35C151A4E9FCB8667C4270F6B_PathIndex" ON "Filenames-271A73A35C151A4E9FCB8667C4270F6B" ("Path") took 0:00:00:00.000
2021-03-08 10:23:24 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteReader]: Starting - ExecuteReader: SELECT "C"."Path", "D"."Length", "C"."FilesetID" FROM (SELECT "A"."Path", "B"."FilesetID" FROM "Filenames-271A73A35C151A4E9FCB8667C4270F6B" A, (SELECT "FilesetID", "Timestamp" FROM "Filesets-CFAAD7436E4696408CE483765485681D" ORDER BY "Timestamp" DESC) B ORDER BY "A"."Path" ASC, "B"."Timestamp" DESC) C LEFT OUTER JOIN (SELECT "Length", "FilesetEntry"."FilesetID", "File"."Path" FROM "Blockset", "FilesetEntry", "File" WHERE "File"."BlocksetID" = "Blockset"."ID" AND "FilesetEntry"."FileID" = "File"."ID" AND FilesetEntry."FilesetID" IN (SELECT DISTINCT "FilesetID" FROM "Filesets-CFAAD7436E4696408CE483765485681D") ) D ON "C"."FilesetID" = "D"."FilesetID" AND "C"."Path" = "D"."Path"
2021-03-08 10:23:24 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteReader]: ExecuteReader: SELECT "C"."Path", "D"."Length", "C"."FilesetID" FROM (SELECT "A"."Path", "B"."FilesetID" FROM "Filenames-271A73A35C151A4E9FCB8667C4270F6B" A, (SELECT "FilesetID", "Timestamp" FROM "Filesets-CFAAD7436E4696408CE483765485681D" ORDER BY "Timestamp" DESC) B ORDER BY "A"."Path" ASC, "B"."Timestamp" DESC) C LEFT OUTER JOIN (SELECT "Length", "FilesetEntry"."FilesetID", "File"."Path" FROM "Blockset", "FilesetEntry", "File" WHERE "File"."BlocksetID" = "Blockset"."ID" AND "FilesetEntry"."FileID" = "File"."ID" AND FilesetEntry."FilesetID" IN (SELECT DISTINCT "FilesetID" FROM "Filesets-CFAAD7436E4696408CE483765485681D") ) D ON "C"."FilesetID" = "D"."FilesetID" AND "C"."Path" = "D"."Path" took 0:00:00:00.240
2021-03-08 10:23:25 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: DROP TABLE IF EXISTS "Filenames-0D9624F40D895144815C696CC3DDA905"
2021-03-08 10:23:25 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: DROP TABLE IF EXISTS "Filenames-0D9624F40D895144815C696CC3DDA905" took 0:00:00:00.000
2021-03-08 10:23:25 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: DROP TABLE IF EXISTS "Filenames-271A73A35C151A4E9FCB8667C4270F6B"
2021-03-08 10:23:25 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: DROP TABLE IF EXISTS "Filenames-271A73A35C151A4E9FCB8667C4270F6B" took 0:00:00:00.000
2021-03-08 10:23:25 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: DROP TABLE IF EXISTS "Filesets-CFAAD7436E4696408CE483765485681D"
2021-03-08 10:23:25 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: DROP TABLE IF EXISTS "Filesets-CFAAD7436E4696408CE483765485681D" took 0:00:00:00.000
2021-03-08 10:23:25 -05 - [Profiling-Timer.Begin-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: Starting - ExecuteNonQuery: PRAGMA optimize
2021-03-08 10:23:25 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Database.ExtensionMethods-ExecuteNonQuery]: ExecuteNonQuery: PRAGMA optimize took 0:00:00:00.000
2021-03-08 10:23:25 -05 - [Profiling-Timer.Finished-Duplicati.Library.Main.Controller-RunList]: Running List took 0:00:00:00.960
Search for took
, and see how long yours take. Note logging can show path info, for example you can see that PortableApps folder got expanded by me for a look. It’s a tiny folder, so yours will certainly take longer.
If live log isn’t sufficient, and you pursue log-file=<path> log-file-log-level=profiling, you can also set option ---profile-all-database-queries
which sometimes gets low-level details that are otherwise omitted.