Has anyone test PerfQuery()'s performance when querying ESX and Virtual Center?
I have been using PerfQuery() to retrieve vm's performance information via ESX3.5 and VC2.5. When I get 300 VM's realtime performace data via ESX it is very rapid (0.6sec). but When I get 300 VM's realtime performace data via VC performance is not very good (15sec).
what difference exist between ESX and VC? Why ESX is more rapid than VC?
I'm not sure I can give you an exact answer for this but I know enough about the architecture to reasonably guess why you're seeing this. Performance data at ESX is stored in memory that can be addressed immediately. Performance data at VC is stored in SQL DBs that may or may not be in memory. Accessing 300 hosts worth of data at VC would walk some page tables that might result in several IOs which are of course several orders of magnitude slower than memory accesses. Even if the counters were in cached at VC's SQL server, VC's interface to that server would incur latencies that are not present in ESX's access to memory.
Of course, the VC-based access is going to be more efficient to the system as a whole due to the elimination of duplicate requests to ESX and the aggregation of network commands.
It would be worthwhile to have a DBA look at the query running on the VC database to see if it can be tuned. We could walk you through the basics of that if you're interested.
When getting realtime performance data, I understood the reason why the ESX-based access is rapid.
-> Performance data at ESX is stored in memory that can be addressed immediately.
However when getting history performace data(spec.intervalId = 300) , why the performance is different as follow?
ESX-based access(spec.intervalId = 300) had taken 7 secinds.
VC-based access(spec.intervalId = 300) had taken 17 secinds.
Why VC-based access had taken about 2 times of the time which ESX-based access had taken?
When VC-based access whether access to ESX from VC indirectly?