Предыстория вопроса: я хочу внедрить систему кеширования для своего веб-сайта. В настоящее время мы исследуем memcache как средство для этого. Однако я ищу, существует ли что-то подобное для SQL Server. Я понимаю, что в MySQL есть кеш запросов, который, хотя и не распределяется, работает как своего рода мера «остановки». Эквивалентен ли кеш запросов MySQL буферному кешу в SQL Server?
Итак, вот мои вопросы:
Спасибо!
Я не думаю, что ваш третий пункт вообще не по теме. Если вы хотите реализовать кеширование для своего веб-сайта, я думаю, имеет смысл использовать memcache или что-то подобное на веб-уровне.
Одна из причин, по которой вы хотите реализовать кеширование, - это в первую очередь уменьшить количество обращений к вашей базе данных. Если вы поместите кеш в БД, вы мало сэкономите.
Ваша производительность также будет во многом зависеть от вашей объектной модели и того, как вы запрашиваете свою базу данных. Если вы кэшируете объекты и все или большинство их свойств, вы получите лучшую производительность кеширования, чем если бы вы кэшировали определенные наборы результатов для каждой страницы, поскольку каждая страница, использующая конкретный объект, может использовать одну и ту же запись кеша.
База данных будет иметь свой собственный внутренний кеш независимо от того, какой метод вы выберете. Это нужно для повышения производительности вашего запроса, когда ваш веб-кеш требует, чтобы вы попали в базу данных, не обращаясь к диску для каждой отдельной страницы данных.
1) Да, вы можете увидеть, что находится в буферном кеше Sql Server (2005 и 2008) --- ДЕМО: количество буферов по объектам и index.sql --- Память по объектам. --- разбить буферы по объектам (таблица, индекс) SELECT b.database_id, database_name = CASE b.database_id WHEN 32767 THEN 'Resource' ELSE db_name (b.database_id) END, p.object_id, Object_Name = object_name (p.object_id , database_id), p.index_id, buffer_count = count (*) FROM sys.allocation_units a JOIN sys.dm_os_buffer_descriptors b ON a.allocation_unit_id = b.allocation_unit_id JOIN sys.partitions p ON a.container_id_id = p.ho ПО b.database_id, p.object_id, p.index_id ORDER BY buffer_count DESC
2) Вы можете закрепить таблицы в кеше в 2005 году - эта функция устарела в 2008 году ... Я думаю, что алгоритм, который SQL Server использует для сохранения горячих таблиц в кеше, лучше, чем вы решаете, что хотите закрепить таблицу в кеше . Время лучше потратить на настройку запроса.
3) Это зависит ...
Приносим извинения, так как это примерно год после его первоначальной публикации, но только что наткнулся на этот вопрос.
В ответ на второй ответ Джо ЭО: «... Вы можете закрепить таблицы в кеше в 2005 году ...» закрепление таблиц больше не работает в SQL2005 ... и вот в чем причина:
http://www.sqlskills.com/BLOGS/PAUL/post/DBCC-PINTABLE.aspx
и, я полагаю, теперь полностью удален из SQL2008.
HTH
скромныйDBA
Кэш запросов отличается от буферного кеша тем, что, хотя буферный кеш содержит фактические блоки данных, кеш запроса содержит результаты для определенных запросов. Другими словами, кеш запроса действует только тогда, когда запрос идентичен или почти идентичен тому, который был ранее запущен, часто ограничивается одним и тем же пользователем.
Буферный кеш действует всякий раз, когда запрос обращается к любым данным, к которым недавно обращался любой другой запрос.
Боюсь, я не знаю ни простого способа узнать, какие данные в настоящее время находятся в буферном пуле, ни поддерживаемого способа закрепления объектов в кеше в SQL Server 2005. Я мог бы добавить, что я в первую очередь администратор баз данных Oracle, так что есть шанс, что кто-то с лучшими знаниями MS-SQL может пролить свет на это.
Буферный кеш на уровне базы данных важен для производительности приложения, несмотря на любое кэширование на уровне приложения. Возможно, существует некоторое перекрытие между системным файловым кешем и буферным кешем базы данных, и в некоторых случаях может быть полезно позволить РСУБД обходить системный кеш.