monitoring memory usage can be done by keeping your own increments, but i spose thats a hacky way to do it.
Especially since you have no clue about alignment and padding restrictions. For example, textures on the Xbox are layed out in tiles of 32x32 pixels, or in case of compressed textures 32x32 blocks (128x128 pixels), and have to be aligned on 4k boundaries. This applies to each individual mip level (although all the levels below 16xN or Nx16 can be packed in the tile that is used for the 16xN or Nx16 level itself). Especially for compressed textures, this can result in a huge waste of space. Now, the memory segments that are used for padding can of course be used for other relatively small resources, but it all gets very fragmented.
In other words, you can't simply count the bytes of your texture resource and assume that's how much video memory they will take up.
One thing about queries is tho, god they are so slow -and WHY?
They are not slow. You have to keep in mind that the GPU and CPU are operating asynchronously. A drawprim call is nothing more than yet another command that is stored in a buffer, to be executed by the GPU later on when she's done with all the previous commands stored in the buffer - the GPU is probably even busy rendering the previous frame while the CPU is issueing commands for the next.