You will benefit much more directly by letting your instance have that extra memory directly and not via that added extra step of creating that virtual drive. Give your instance more global buffers. Also from the sounds of it you might want to look at your queries and associated query plans in a bit more detail. You should get in touch with the WRC for that, they're great at sorting out why queries run slow ( you might want to reach out to car-part first, maybe they've fixed some of the queries)

Even just doing a read access is significantly slower with the %DynamicArray types. I ran into that during the Advent of Code puzzles and had to fall back to $LB lists and arrays. consider a simple loop to go through 100k items:

Class fkh2019.Bench Extends %RegisteredObject
{

ClassMethod listtest()
{

    #; let's build a long list
    s mylist=""
    for i=1:1:100000{
        s mylist=mylist_$LB(i)
    }
    s start=$P($ZTS,",",2)
    Set P=0
    While $LISTNEXT(mylist,P,value) {
        s disgard=value
    }
    s end=$P($ZTS,",",2)
    return end-start
}

ClassMethod dyntest()
{
    #; let's build a long list
    s mylist=[]
    for i=1:1:100000{
        d mylist.%Push(i)

    }

    s start=$P($ZTS,",",2)
    Set it=mylist.%GetIterator()
    While it.%GetNext(.key,.value) {
        s disgard=value
    }
    s end=$P($ZTS,",",2)
    return end-start
}

ClassMethod runtests()
{
    s t1=..listtest()
    s t2=..dyntest()
    w "list access took ",t1, " seconds",!
    w "dyn array access took ",t2, " seconds",!
}

}

The %DynamicArray takes about 15x longer:

IRISAPP>d ##class(fkh2019.Bench).runtests()
list access took .005273 seconds
dyn array access took .082946 seconds

It's a graph library that allows me to create a generic graph. the shortestPath method uses A* (https://en.wikipedia.org/wiki/A*_search_algorithm) to find the shortest path connecting two nodes in the graph. This is reusable in all of the 'find a path through a maze' kind of puzzles. The lack of generalized libraries/tools is the biggest drawback in COS. For example Day20, part1: https://github.com/kazamatzuri/AoC/blob/1387289dbcacfa2d7dd62906e873c074...

 k ^grid,^ports,^portals
    d ..parseInitial()
    d ..buildGraph()
    d ..findPortals()
    d ..linkPortals()

    s entry=$LG(^portals("AA"),1)
    s exit=$LG(^portals("ZZ"),1)
    zw entry
    w " -> ",!
    zw exit
    s path=..graph.shortestPath(entry,exit)    
    s length=$LL(..graph.shortestPath(entry,exit))-1
    return length