কোনও প্রদত্ত এসকিউএল সার্ভারের উদাহরণটিতে "মেমরিতে লক পেজগুলি" আছে কিনা তা আমি নির্ভরযোগ্যভাবে কীভাবে নির্ধারণ করতে পারি?


12

"মেমরিতে লক পেজস" রাইটটি এসকিউএল সার্ভার দ্বারা ব্যবহৃত পরিষেবা অ্যাকাউন্টে দেওয়া যেতে পারে। এটি এসকিউএল সার্ভারকে মেমরিটিকে ডিস্কে পেজ করা রোধ করতে সহায়তা করে।

আমি লক্ষ্য করেছি যে আমাদের বেশ কয়েকটি এসকিউএল সার্ভার মেশিনে এসকিউএল সার্ভার দ্বারা ব্যবহৃত পরিষেবা অ্যাকাউন্টের জন্য এই অধিকারটি অনুমোদনের জন্য স্থানীয় নীতিটি কনফিগার করা নেই। যেহেতু আমাদের কাছে প্রচুর সংখ্যক সার্ভার রয়েছে, তাই "স্থানীয় সিস্টেম নীতি" পরিচালনা কনসোলটি ব্যবহার করে প্রত্যেককে ম্যানুয়ালি পরীক্ষা করা সবচেয়ে ক্লান্তিকর হবে।

কোনও টি-এসকিউএল কোয়েরি, বর্ধিত সঞ্চিত প্রক্রিয়া, বা আমি জিজ্ঞাসা করা সার্ভারের অধিকার আছে কি না তা নির্ধারণ করতে আমি ব্যবহার করতে পারি এমন অন্য কোনও পদ্ধতি আছে?

আমি এটি ব্যবহার করতে চাই নাEXEC xp_readerrorlog 0, 1, 'lock memory privilege was not granted'; কারণ এটি বর্তমান এসকিউএল সার্ভার ত্রুটির লগ চেক করার উপর নির্ভর করে; এবং সেই ত্রুটি লগটিতে প্রাসঙ্গিক এন্ট্রি থাকতে পারে না ধরে নেওয়া যায় যে সার্ভারটি সর্বশেষ পুনরায় চালু করার পরে লগটি রোল করা হয়েছে। আমি থেকে প্রথম প্যারামিটার পরিবর্তন দ্বারা পুরোনো লগ পরীক্ষা পারে উপলব্ধি 0করতে 1, ইত্যাদি, তবে আমরা মাত্র 10 ত্রুটি লগ বজায় রাখা, এবং যে যথেষ্ট নাও হতে পারে। আমি সেটিংসটি নিশ্চিত করার একটি ব্যর্থ-নিরাপদ উপায় চাই।

উত্তর:


11

যদি xp_cmdshellকোনও বিকল্প হয় তবে এখানে একটি স্ক্রিপ্ট তৈরির ব্যবহার রয়েছে whoami:

DECLARE @LockPagesInMemory VARCHAR(255);
SET @LockPagesInMemory = 'UNKNOWN';
DECLARE @Res TABLE
(
    [output] NVARCHAR(255) NULL
);

IF (SELECT value_in_use
    FROM sys.configurations c
    WHERE c.name = 'xp_cmdshell'
    ) = 1
BEGIN
    INSERT INTO @Res
    EXEC xp_cmdshell 'WHOAMI /PRIV';

    IF EXISTS (SELECT *
        FROM @Res 
        WHERE [output] LIKE 'SeLockMemoryPrivilege%'
        )
        SET @LockPagesInMemory = 'ENABLED';
    ELSE
        SET @LockPagesInMemory = 'DISABLED';
END

SELECT LockPagesInMemoryEnabled = @LockPagesInMemory;

whoami.exeঅ্যাকাউন্ট নির্বাহী দ্বারা পরিচালিত সমস্ত অধিকারের প্রতিবেদন করার ক্ষমতা রাখে whoami। এটি, সরবরাহগুলির সাথে মিলিত xp_cmdshellএসকিউএল সার্ভারের উদাহরণে মেমরিতে পৃষ্ঠাগুলি লক করার প্রয়োজনীয় অধিকার আছে কিনা তা নির্ধারণের একটি নির্ভরযোগ্য উপায় সরবরাহ করে।

যদি xp_cmdshellসক্ষম না করা থাকে তবে এই কোডটি ফেরত দেয় UNKNOWN। ধরে xp_cmdshell নেওয়া সক্ষম করা হয়েছে এবং এসকিউএল সার্ভার অ্যাকাউন্টের জন্য ডানটি সক্ষম করা হয়েছে, এটি ফিরে আসে ENABLED, অন্যথায় এটি ফিরে আসে DISABLED


9

এছাড়াও অন্যান্য পদ্ধতি আছে। সম্ভবত আপনি দুটি ডিএমভি ব্যবহার করতে পারেন। দয়া করে মনে রাখবেন যে উভয়ই কেবল এসকিউএল সার্ভার ২০০৮ এবং তারপরের জন্য কাজ করবে।

এর জন্য একটি শূন্য মূল্য নয় locked_page_allocations_kbযে আপনাকে জিজ্ঞাসা করবে যে এসকিউএল সার্ভার অ্যাকাউন্টে মেমরির সুবিধায় পৃষ্ঠাগুলি লক হয়েছে।

select osn.node_id, 
osn.memory_node_id, 
osn.node_state_desc, 
omn.locked_page_allocations_kb
from sys.dm_os_memory_nodes omn
inner join sys.dm_os_nodes osn on (omn.memory_node_id = osn.memory_node_id)
where osn.node_state_desc <> 'ONLINE DAC'

...এবং:

select
(physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024 )Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
from sys.dm_os_process_memory

যদি কলামটি Locked_pages_allocation_KBশূন্য নয় এমন মান দেখায় তবে এসকিউএল সার্ভার পরিষেবা অ্যাকাউন্টে মেমোরি সুবিধায় পৃষ্ঠাগুলি লক করা আছে।

...এবং:

DBCC MEMORYSTATUSআউটপুটটির "মেমরি ম্যানেজার" বিভাগটি "এডাব্লুইউ বরাদ্দকৃত" বা এসকিউএল সার্ভার পরিষেবা অ্যাকাউন্টে মেমরির সুবিধায় পৃষ্ঠাগুলি লক করা থাকলে একটি ননজারো মান দেখায়।

বিঃদ্রঃ:

যদি এসকিউএল সার্ভার পরিষেবাদি অ্যাকাউন্টটি স্থানীয় সিস্টেম (এনটি কর্তৃপক্ষ \ সিস্টেম) অ্যাকাউন্টের সাথে চলতে থাকে, তবে ডিফল্টরূপে এসকিউএল সার্ভারের মেমরির অধিকারে লকড পৃষ্ঠা থাকবে।

হালনাগাদ:

স্ট্যান্ডার্ড সংস্করণের জন্য এসকিউএল সার্ভার ২০১২ এর আগে এলপিআইএমের সুবিধা নিতে আমাদের ট্রেস পতাকা টি -845 সক্ষম করতে হবে। এমনকি যদি আপনি এলপিআইএম সুবিধার অধিকারী অ্যাকাউন্টের সাথে এসকিউএল সার্ভার চালাচ্ছেন তবে ট্রেস পতাকাটি সক্ষম না করা পর্যন্ত এসকিউএল সার্ভার আসলে এলপিআইএম সুবিধা ব্যবহার করবে না।

২০১২ সাল থেকে এলপিআইএম সুবিধা নিতে আমাদের স্ট্যান্ডার্ড সংস্করণে ট্রেস পতাকা সক্ষম করার দরকার নেই।


4

মাইক্রোসফ্ট পণ্যের নতুন সংস্করণগুলিতে এটি আরও সহজ করে তোলে যদি আপনি সত্যিই জানতে চান যে এসকিউএল সার্ভার একটি মেমরি মডেল নিয়ে চলছে যা এলপিআইএমের সুবিধা গ্রহণ করে (সঠিক অনুমতি পাওয়ার বিপরীতে)। এই তথ্যটি আপনার এসকিউএল সার্ভারের সংস্করণ অনুসারে sys.dm_os_sys_info- এ রয়েছে । বর্ধন একটি ব্লগ পোস্টে ঘোষণা করা হয়েছিল :

এসকিউএল সার্ভার 2016 এসপি 1 এবং এসকিউএল সার্ভার 2012 এসপি 4 এর সাথে, sysl_memory_model এবং sql_memory_model_desc এ দুটি নতুন কলাম রয়েছে sys.dm_os_sys_info এ যুক্ত করা হয়েছে যা সনাক্ত করতে ব্যবহৃত হতে পারে যদি মেমোরিতে লক পৃষ্ঠা (LPIM) অনুমতিগুলি এসকিউএল সার্ভার পরিষেবা অ্যাকাউন্টে বরাদ্দ করা হয়।

একটি সচেতন হওয়া গুরুত্বপূর্ণ বিষয় হ'ল, নতুন কলামগুলি এসকিউএল সার্ভার উদাহরণ শুরু হওয়ার পর থেকে ব্যবহৃত সিক্যুয়াল মেমরি মডেলটির তথ্য দেয় যা তথ্যটি পছন্দসই। স্কেল পরিষেবা অ্যাকাউন্টের জন্য এলপিআইএম অনুমতিগুলির জন্য ওএস পর্যায়ে কোনও চেক করা হয় না। যদি এসকিউএল সার্ভার প্রারম্ভকালে, এলপিআইএম সুবিধার্থে এসকিউএল সার্ভার পরিষেবা অ্যাকাউন্ট প্রক্রিয়া টোকেন উপস্থিত থাকে, এসকিউএল সার্ভারটি স্কয়ার মেমরির বরাদ্দ করতে লকড পৃষ্ঠাগুলি (অ-পৃষ্ঠাযুক্ত) ব্যবহার করে। আরও, আপনি যদি এসকিউএল সার্ভারের এন্টারপ্রাইজ সংস্করণটি এসকিউএল পরিষেবা অ্যাকাউন্টে নির্ধারিত এলপিআইএম সুবিধাসমূহের সাথে চালাচ্ছেন এবং 830 সারণী পতাকাটি চালু করা হয়েছে, এসকিউএল সার্ভার এসকিউএল মেমরির বরাদ্দ করতে বড় পৃষ্ঠা ব্যবহার করে।

প্রদত্ত এসকিউএল সার্ভারের জন্য মেমোরি সুবিধার লক পৃষ্ঠাগুলি কার্যকর রয়েছে কিনা তা পরীক্ষা করতে, আপনি sys.dm_os_sys_info এ sql_memory_model টি জিজ্ঞাসা করতে পারেন এবং 1 এর চেয়ে বেশি মানের সন্ধান করতে পারেন।

যদি পরিষেবাগুলির অ্যাকাউন্ট প্রক্রিয়া টোকেনে এলপিআইএম অনুমতি অনুপস্থিত থাকে তবে প্রচলিত মেমরি মডেল ব্যবহার করা হয় এবং এটি ডিএমভি দ্বারা রিপোর্ট করা হয় (sql_memory_model = 1)। যদি এখন, মেমোরি সুবিধায় লক পৃষ্ঠাগুলি এসকিউএল সার্ভারে বরাদ্দ করা হয় তবে এসকিউএল পরিষেবাটি আরম্ভ করা হয় না, ডিএমভি প্রচলিত মেমরি মডেলটির প্রতিবেদন করতে থাকবে কারণ এটি মেমরির মডেলটি শুরু হওয়ার পরে কার্যকর। পুনঃসূচনা করার পরে, এসকিউএল সার্ভার মেমোরি মডেলটিতে লক করা পৃষ্ঠাগুলি ব্যবহার করে এবং এটি sql_memory_model এবং sql_memory_model_desc দ্বারা sys.dm_os_sys_info তে প্রতিবেদন করা হয়।

যদি আমি আমার সার্ভারগুলির মধ্যে একটিতে নিম্নলিখিত কোয়েরিটি চালাই:

SELECT sql_memory_model, sql_memory_model_desc
FROM sys.dm_os_sys_info;

বর্তমানে ব্যবহৃত মেমরি মডেলটি হ'ল এর CONVENTIONALঅর্থ সার্ভার শুরুর সময় এলপিআইএম দেওয়া হয়নি। তবে, এলপিআইএম সরবরাহ করা সম্ভব হবে তবে এসকিউএল সার্ভার পরিষেবাটি পুনরায় আরম্ভ করা উচিত নয়, সুতরাং আপনার প্রশ্নের সঠিক প্রকৃতির উপর নির্ভর করে এই ডিএমভি আপনার পক্ষে কার্যকর নাও হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.