У мене є веб-сайт ASP.NET, який робить власне кешування даних і дані не змінюються протягом тривалих періодів часу, тому йому не потрібно вдруге запитувати SQL Server тим же запитом. Мені потрібно покращити продуктивність перших запитів (незайманих), які надходять на цей SQL Server. Деякі запити обробляють стільки даних, що можуть спричинити використання SQL Server tempdb
. Я не використовую змінні таблиці темп або тимчасові таблиці, тому SQL Server вирішує використовувати tempdb
сам, коли це потрібно.
Мій db - 16Gb, у мене на серверній машині доступна 32Gb фізичної оперативної пам’яті.
Я розумію, що стратегія кешування MS SQL Server намагається зберегти дані в оперативній пам'яті, щоб прискорити виконання аналогічних запитів, якщо вони потребують повторного завантаження тих же даних. На додаток до цього він намагатиметься використовувати доступну оперативну пам’ять замість tempdb для прискорення продуктивності, не викликаючи доступу до диска.
Я припускаю, що коли надходить запит, який потребує збереження чогось у tempdb SQL Server, і недостатньо оперативної пам’яті, SQL Server має два варіанти:
1) для вивантаження деяких кешованих даних і використання запам’ятованої оперативної пам’яті замість tempdb, щоб уникнути запису на диск
2) зберігати кешовані дані для майбутніх запитів і починати використовувати tempdb, що призводить до запису на повільний диск.
Я не знаю, який вибір зробить SQL Server у цій ситуації, але я хотів би, щоб він вибрав вибір №1, тому що я дбаю лише про виконання перших (незайманих) запитів, тому що я ніколи більше не надсилаю такий же запит на SQL Server (хоча я можу надіслати подібний запит).
Яка стратегія кешування SQL Server для цього сценарію?
Як врівноважується використання оперативної пам’яті між униканням tempdb для незайманих запитів та швидкістю повторних запитів?
Чи можливо налаштувати SQL Server таким чином, що він зробить вибір №1? Якщо так, то як?
Як ще я можу підвищити продуктивність усіх незайманих SQL запитів?
Оскільки я не знаю про стратегію кешування SQL Server, я хочу розмістити базу даних на диску RAM. Це дозволить переконатися, що будь-який незайманий запит має високу швидкість завантаження кешованих даних, навіть якщо SQL Server завжди робить вибір №1. Небезпека полягає в тому, що SQL Server може почати використовувати більше tempdb з менш доступною оперативною пам’яттю (залишилося лише 16 Гбіт після використання 16 Гбіт для RAM диска), якщо він продовжує робити вибір №2, що сповільнить ці незаймані запити, які спричиняють розлив tempdb
.
Мене цікавить рішення для SQL 2008 R2, але я думаю, що це, мабуть, те саме для SQL 2008, SQL 2005 і може бути SQL 2000.
Роз'яснення:
У цьому вікні не працює жодна інша програма, вона присвячена SQL Server . Веб-сайт працює в окремому вікні.
Це 64-розрядна версія SQL Server 2008 R2 Standard Edition у Windows Server 2008 R2 Enterprise 64 біт.
Я запускаю лише запити лише для читання, і база даних встановлюється лише для читання .
Припустимо, що вже є хороші показники . Це питання про те, що SQL Server робить вибір №1 проти вибору №2, як це зробити, якщо є спосіб керувати ним і якщо диск RAM допомагає зробити правильний вибір для запитів незайманих.