I find our system hitting the throttling wall under nominal loads, say 120 inserts per second per instance. There are other concurrent processes running, which we are offloading/optimizing, etc. What I want to know is this: does anyone have any insights into the level of impact that the presence of indexes has on throttling? I have a few performance issues elsewhere in the system where the presence of an index would help, but I hesitate to add them because of their additional CPU and I/O loads!
Any real-world advice here would be welcome. Please keep it SQL Azure specific.
When it comes to indexing you of course need to evaluate the tradeoff of overhead vs. performance improvements of your queries. What will hurt you the most are indexes that are not being used, because the overhead of maintaining an index falls in the category of what gets throttled.
If you add an index, can you get rid of another one that is now obsolete? Are your queries consuming fewer throttled resources (I/O, Memory, CPU) as a result of adding an index?
Also note that CPU is no longer throttled in a hard fashion (like I/O or Memory); queries will execute slower, but they will execute.
In the end, I have rarely seen indexes being a significant cause of throttling, except perhaps at the time of the creation of an index (or refresh). Nevertheless, common sense applies in SQL Azure like in SQL Server: creating indexes that are not too wide, and making sure the indexes reduce existing query resource consumption.
Using the DMVs can help you determine if your overall resource consumption is dropping.