Skip to content
About
Main content
Model

External sort: passes and fan-in

The merge fan-in is memory divided by the medium's efficient transfer unit.

Data
data to sort
Memory
memory for the sort
Fan-in
how many runs are merged at once

Recurring principle: Fixed cost per operation

How it behaves

One input on the horizontal axis, the others held fixed.

F = 10 (old disks)F = 100F = 8,192 (NVMe, 1 MB buffers)
Data table
Passes over the data by data-to-memory ratio
Data ÷ memory N/MseriesPasses
1F = 10 (old disks)1
1.26F = 10 (old disks)2
1.58F = 10 (old disks)2
2F = 10 (old disks)2
2.51F = 10 (old disks)2
3.16F = 10 (old disks)2
3.98F = 10 (old disks)2
5.01F = 10 (old disks)2
6.31F = 10 (old disks)2
7.94F = 10 (old disks)2
10F = 10 (old disks)2
12.6F = 10 (old disks)3
15.8F = 10 (old disks)3
20F = 10 (old disks)3
25.1F = 10 (old disks)3
31.6F = 10 (old disks)3
39.8F = 10 (old disks)3
50.1F = 10 (old disks)3
63.1F = 10 (old disks)3
79.4F = 10 (old disks)3
100F = 10 (old disks)3
126F = 10 (old disks)4
158F = 10 (old disks)4
200F = 10 (old disks)4
251F = 10 (old disks)4
316F = 10 (old disks)4
398F = 10 (old disks)4
501F = 10 (old disks)4
631F = 10 (old disks)4
794F = 10 (old disks)4
1KF = 10 (old disks)4
1.26KF = 10 (old disks)5
1.58KF = 10 (old disks)5
2KF = 10 (old disks)5
2.51KF = 10 (old disks)5
3.16KF = 10 (old disks)5
3.98KF = 10 (old disks)5
5.01KF = 10 (old disks)5
6.31KF = 10 (old disks)5
7.94KF = 10 (old disks)5
10KF = 10 (old disks)5
12.6KF = 10 (old disks)6
15.8KF = 10 (old disks)6
20KF = 10 (old disks)6
25.1KF = 10 (old disks)6
31.6KF = 10 (old disks)6
39.8KF = 10 (old disks)6
50.1KF = 10 (old disks)6
63.1KF = 10 (old disks)6
79.4KF = 10 (old disks)6
100KF = 10 (old disks)6
126KF = 10 (old disks)7
158KF = 10 (old disks)7
200KF = 10 (old disks)7
251KF = 10 (old disks)7
316KF = 10 (old disks)7
398KF = 10 (old disks)7
501KF = 10 (old disks)7
631KF = 10 (old disks)7
794KF = 10 (old disks)7
1MF = 10 (old disks)7
1.26MF = 10 (old disks)8
1.58MF = 10 (old disks)8
2MF = 10 (old disks)8
2.51MF = 10 (old disks)8
3.16MF = 10 (old disks)8
3.98MF = 10 (old disks)8
5.01MF = 10 (old disks)8
6.31MF = 10 (old disks)8
7.94MF = 10 (old disks)8
10MF = 10 (old disks)8
12.6MF = 10 (old disks)9
15.8MF = 10 (old disks)9
20MF = 10 (old disks)9
25.1MF = 10 (old disks)9
31.6MF = 10 (old disks)9
39.8MF = 10 (old disks)9
50.1MF = 10 (old disks)9
63.1MF = 10 (old disks)9
79.4MF = 10 (old disks)9
100MF = 10 (old disks)9
1F = 1001
1.26F = 1002
1.58F = 1002
2F = 1002
2.51F = 1002
3.16F = 1002
3.98F = 1002
5.01F = 1002
6.31F = 1002
7.94F = 1002
10F = 1002
12.6F = 1002
15.8F = 1002
20F = 1002
25.1F = 1002
31.6F = 1002
39.8F = 1002
50.1F = 1002
63.1F = 1002
79.4F = 1002
100F = 1002
126F = 1003
158F = 1003
200F = 1003
251F = 1003
316F = 1003
398F = 1003
501F = 1003
631F = 1003
794F = 1003
1KF = 1003
1.26KF = 1003
1.58KF = 1003
2KF = 1003
2.51KF = 1003
3.16KF = 1003
3.98KF = 1003
5.01KF = 1003
6.31KF = 1003
7.94KF = 1003
10KF = 1003
12.6KF = 1004
15.8KF = 1004
20KF = 1004
25.1KF = 1004
31.6KF = 1004
39.8KF = 1004
50.1KF = 1004
63.1KF = 1004
79.4KF = 1004
100KF = 1004
126KF = 1004
158KF = 1004
200KF = 1004
251KF = 1004
316KF = 1004
398KF = 1004
501KF = 1004
631KF = 1004
794KF = 1004
1MF = 1004
1.26MF = 1005
1.58MF = 1005
2MF = 1005
2.51MF = 1005
3.16MF = 1005
3.98MF = 1005
5.01MF = 1005
6.31MF = 1005
7.94MF = 1005
10MF = 1005
12.6MF = 1005
15.8MF = 1005
20MF = 1005
25.1MF = 1005
31.6MF = 1005
39.8MF = 1005
50.1MF = 1005
63.1MF = 1005
79.4MF = 1005
100MF = 1005
1F = 8,192 (NVMe, 1 MB buffers)1
1.26F = 8,192 (NVMe, 1 MB buffers)2
1.58F = 8,192 (NVMe, 1 MB buffers)2
2F = 8,192 (NVMe, 1 MB buffers)2
2.51F = 8,192 (NVMe, 1 MB buffers)2
3.16F = 8,192 (NVMe, 1 MB buffers)2
3.98F = 8,192 (NVMe, 1 MB buffers)2
5.01F = 8,192 (NVMe, 1 MB buffers)2
6.31F = 8,192 (NVMe, 1 MB buffers)2
7.94F = 8,192 (NVMe, 1 MB buffers)2
10F = 8,192 (NVMe, 1 MB buffers)2
12.6F = 8,192 (NVMe, 1 MB buffers)2
15.8F = 8,192 (NVMe, 1 MB buffers)2
20F = 8,192 (NVMe, 1 MB buffers)2
25.1F = 8,192 (NVMe, 1 MB buffers)2
31.6F = 8,192 (NVMe, 1 MB buffers)2
39.8F = 8,192 (NVMe, 1 MB buffers)2
50.1F = 8,192 (NVMe, 1 MB buffers)2
63.1F = 8,192 (NVMe, 1 MB buffers)2
79.4F = 8,192 (NVMe, 1 MB buffers)2
100F = 8,192 (NVMe, 1 MB buffers)2
126F = 8,192 (NVMe, 1 MB buffers)2
158F = 8,192 (NVMe, 1 MB buffers)2
200F = 8,192 (NVMe, 1 MB buffers)2
251F = 8,192 (NVMe, 1 MB buffers)2
316F = 8,192 (NVMe, 1 MB buffers)2
398F = 8,192 (NVMe, 1 MB buffers)2
501F = 8,192 (NVMe, 1 MB buffers)2
631F = 8,192 (NVMe, 1 MB buffers)2
794F = 8,192 (NVMe, 1 MB buffers)2
1KF = 8,192 (NVMe, 1 MB buffers)2
1.26KF = 8,192 (NVMe, 1 MB buffers)2
1.58KF = 8,192 (NVMe, 1 MB buffers)2
2KF = 8,192 (NVMe, 1 MB buffers)2
2.51KF = 8,192 (NVMe, 1 MB buffers)2
3.16KF = 8,192 (NVMe, 1 MB buffers)2
3.98KF = 8,192 (NVMe, 1 MB buffers)2
5.01KF = 8,192 (NVMe, 1 MB buffers)2
6.31KF = 8,192 (NVMe, 1 MB buffers)2
7.94KF = 8,192 (NVMe, 1 MB buffers)2
10KF = 8,192 (NVMe, 1 MB buffers)3
12.6KF = 8,192 (NVMe, 1 MB buffers)3
15.8KF = 8,192 (NVMe, 1 MB buffers)3
20KF = 8,192 (NVMe, 1 MB buffers)3
25.1KF = 8,192 (NVMe, 1 MB buffers)3
31.6KF = 8,192 (NVMe, 1 MB buffers)3
39.8KF = 8,192 (NVMe, 1 MB buffers)3
50.1KF = 8,192 (NVMe, 1 MB buffers)3
63.1KF = 8,192 (NVMe, 1 MB buffers)3
79.4KF = 8,192 (NVMe, 1 MB buffers)3
100KF = 8,192 (NVMe, 1 MB buffers)3
126KF = 8,192 (NVMe, 1 MB buffers)3
158KF = 8,192 (NVMe, 1 MB buffers)3
200KF = 8,192 (NVMe, 1 MB buffers)3
251KF = 8,192 (NVMe, 1 MB buffers)3
316KF = 8,192 (NVMe, 1 MB buffers)3
398KF = 8,192 (NVMe, 1 MB buffers)3
501KF = 8,192 (NVMe, 1 MB buffers)3
631KF = 8,192 (NVMe, 1 MB buffers)3
794KF = 8,192 (NVMe, 1 MB buffers)3
1MF = 8,192 (NVMe, 1 MB buffers)3
1.26MF = 8,192 (NVMe, 1 MB buffers)3
1.58MF = 8,192 (NVMe, 1 MB buffers)3
2MF = 8,192 (NVMe, 1 MB buffers)3
2.51MF = 8,192 (NVMe, 1 MB buffers)3
3.16MF = 8,192 (NVMe, 1 MB buffers)3
3.98MF = 8,192 (NVMe, 1 MB buffers)3
5.01MF = 8,192 (NVMe, 1 MB buffers)3
6.31MF = 8,192 (NVMe, 1 MB buffers)3
7.94MF = 8,192 (NVMe, 1 MB buffers)3
10MF = 8,192 (NVMe, 1 MB buffers)3
12.6MF = 8,192 (NVMe, 1 MB buffers)3
15.8MF = 8,192 (NVMe, 1 MB buffers)3
20MF = 8,192 (NVMe, 1 MB buffers)3
25.1MF = 8,192 (NVMe, 1 MB buffers)3
31.6MF = 8,192 (NVMe, 1 MB buffers)3
39.8MF = 8,192 (NVMe, 1 MB buffers)3
50.1MF = 8,192 (NVMe, 1 MB buffers)3
63.1MF = 8,192 (NVMe, 1 MB buffers)3
79.4MF = 8,192 (NVMe, 1 MB buffers)4
100MF = 8,192 (NVMe, 1 MB buffers)4

Worked examples, recomputed

Every number the mechanisms quote for this relationship is recomputed from it, so none of them disagrees with it.

Where it appears

Each mechanism states it in its own names. The general symbol each name stands for is shown with it.

  • Query Processing

    Why can one question be answered by plans whose costs differ by a factor of ten thousand, and what does each operator force the engine to do?

    |build| =

    Read it in place →

  • Query Processing

    Why can one question be answered by plans whose costs differ by a factor of ten thousand, and what does each operator force the engine to do?

    M / B (blocks of memory) =

    Read it in place →

  • Execution Engine Runtime

    Once a query plan is chosen, why does the machine still sit idle, and what does each mechanism of a query runtime pay to buy that idle time back?

    k (merge fan-in) = · S_task / B =

    Read it in place →

  • Memory & Resource Management

    Who is allowed to hold how much memory, for how long, and what happens to the work when the answer is less than it asked for?

    N (build side) = · M / B (partitions) =

    Read it in place →

  • Memory & Resource Management

    Who is allowed to hold how much memory, for how long, and what happens to the work when the answer is less than it asked for?

    M/B − 1 =

    Read it in place →