У меня довольно огромный (30 миллионов строк, до 5-100Kb каждый) Таблица на Azure.
Каждый RowKey
является Guid и PartitionKey
является первым Guid часть, например:Как уменьшить латентность хранения лазурных таблиц?
PartitionKey = "1bbe3d4b"
RowKey = "1bbe3d4b-2230-4b4f-8f5f-fe5fe1d4d006"
Таблица содержит 600 считывает и 600 записи (обновления) в секунду с средней латентности 60ms. Все запросы используют как PartitionKey
, так и RowKey
.
НО, некоторые чтения принимают до 3000ms (!). В среднем,> 1% от всех прочитанных занимает более 500 мс, и нет никакой корреляции с размером сущности (строка 100 Кбит может быть возвращена в 25 мс и 10 Кб один - в 1500 мс).
Мое приложение представляет собой веб-сайт ASP.Net MVC 4, работающий на 4-5 больших экземплярах.
Я прочитал все статьи MSDN относительно целей производительности Azure Table Storage и уже сделали следующее:
UseNagle
выключенномExpect100Continue
также отключаетсяMaxConnections
для настольного клиента устанавливается в 250 (установка 1000-5000 не имеет никакого смысла)
Также я проверил, что:
- хранение счетчиков мониторинг счета никогда никаких ошибок дроссельных
- Есть своего рода «волна» в исполнении, хотя они не зависят от нагрузки
Что может быть причиной таких проблем с производительностью и как его улучшить?
расположен Ваш счет хранения в том же регионе, что и ваш сайт? –
Для данного PartitionKey примерно столько строк у вас есть? Для 600 записей и 600 записей, происходят ли они в одном и том же PartitionKey или распространяется на несколько разделов? –
@ zain-rizvi, да, из-за причин, между регионами я не смогу получить в среднем 60 мс. –