Hi
I had a similar problem with version 2.20 until a week ago, when we spent a full day optimizing everything. My CPU is now sitting happily at 5% with some peaks which is quite normal. Still with version 2.20.
Top 3 things I checked and fixed:
1) Free HD space. It may sound silly, but limited space (specially in the C system drive) makes Win server really SLOW. I had 600Mb of free space (in a 40Gb HD), now I have 16 Gb of free space.
2) Most of this disk space was used by the database log files (.LDF) (13Gb for a 30Mb database). You can truncate them and avoid the default 'auto grow by 10%' setting. To truncate the log files I had to run some query in SQL Management Studio, just google it. For example:
http://madhuottapalam.blogspot.com.es/2008/05/faq-how-to-truncate-and-shrink.html
3) Rebuild/reorganize DB indexes to reduce index fragmentation. Again, I used a query in SSMS to return a list of indexes, their table, and their average fragmentation. This is the code:
USE [yourDbName]
SELECT ps.database_id, ps.OBJECT_ID,
ps.index_id, o.name as [Table], b.name as [Index],ps.page_count,
ps.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS ps
INNER JOIN sys.indexes AS b ON ps.OBJECT_ID = b.OBJECT_ID
INNER JOIN sys.objects AS o ON ps.object_id = o.object_id
AND ps.index_id = b.index_id
WHERE ps.database_id = DB_ID() AND page_count > 5
ORDER BY ps.avg_fragmentation_in_percent DESC
GO
Run this query to find your worst indexes. Having the results on the query window, I just had to go through the list, and with 2 clics on the left pane (your DB) expand the appropiate table, find the index, Right click on it, and then either REBUILD or REORGANIZE index.
A good rule of thumb is to Reorganize if you have < 40% fragmentation, or to Rebuild for > 40% fragmentation.
In fact, this index rebuilding/reorganizing was so successful we're now thinking of automating this process, as index fixing can also be done with SQL code. So a SQL Job could run the above code, iterate the results and rebuild each index. Fragmentation just happens as time goes by, specially if you add/modify/delete many entities (Products, PVariants, and so on), so be sure to check again from time to time.
Again, I'm not sure how much each of these steps adds to the overall performance gain, but the site is now like 500% faster. You can check it out at www.voipcentrix.com.
Hope this helps, best regards