এসকিউএল সার্ভারে সমস্ত সংযোগের জন্য এরিটিহবার্ট সেট করার ব্যর্থতাগুলি কী কী?


10

সুতরাং আমি নির্ধারণ করেছি যে আমার এসকিউএল সার্ভারের অনিয়মিত আচরণটি। নেট স্ক্যালক্লিয়েন্ট ডেটা সরবরাহকারীর ডিফল্ট সেটিং এর কারণে SET ARITHABORT OFF। এই বলে যে, আমি বিভিন্ন নিবন্ধ পড়েছি যা এটি কার্যকর করার সর্বোত্তম উপায়ে বিতর্ক করে। আমার জন্য, আমি কেবল একটি সহজ উপায় চাই কারণ এসকিউএল সার্ভার ভুক্তভোগী এবং আমার ক্যোয়ারী টিউনিং পুরো অ্যাপ্লিকেশনটিতে পুরোপুরি সীমাবদ্ধ হয়নি (এবং স্পষ্টতই SETএকটি এসপিতে যোগ করা কাজ করে না)।

বিষয়টি সম্পর্কে এরল্যান্ড সোমমারস্কোগের উজ্জ্বল নিবন্ধে তিনি মূলত SET ARITHABORT ONসংযোগের জন্য অ্যাপ্লিকেশনটি পরিবর্তন করে নিরাপদ পদ্ধতির গ্রহণের পরামর্শ দিয়েছেন । যাইহোক, একটি dba.stackexchange প্রশ্নের এই উত্তরে সলোমন রুটজকি উদাহরণস্বরূপ এবং ডাটাবেস-বিস্তৃত উভয় পদ্ধতির প্রস্তাব দেয়।

এই ইনস্ট্যান্স-ওয়াইডটি সেট করে আমি কী কী অনুচ্ছেদে এখানে মিস করছি? আমি এটি দেখতে পেয়েছি ... যেহেতু এসএসএমএসের ONডিফল্টরূপে এই সেট রয়েছে , তাই আমি ONসমস্ত সংযোগের জন্য এই সার্ভার-ওয়াইড সেট করতে কোনও ক্ষতি দেখছি না । দিনের শেষে, আমার কেবলমাত্র এই এসকিউএল সার্ভারটি অন্য সমস্ত কিছুর উপরে সম্পাদন করা প্রয়োজন।


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

1
কোনও ইএফ নয়, তবে আপনি কীভাবে ইএফ ইন্সট্যান্স-ওয়াইড সেটিংসকে ওভাররাইড করতে পারেন তা নিয়ে একটি আকর্ষণীয় বিষয় উত্থাপন করেন। সুতরাং, যদি কোনও সংযোগ এটিকে ওভাররাইড করতে পারে তবে স্পষ্টতই এই সেটটি রাখার সবচেয়ে নির্ভরযোগ্য জায়গাটি যদি সম্ভব হয় তবে এসকিউএল সার্ভারে প্রতিষ্ঠিত সংযোগের মধ্যে থেকে ...
এরিক সুইগাম

1
"আপনার লগন সেশনে সর্বদা এরিটিএবার্ট সেট করুন AR মাইক্রোসফ্টের এই নিবন্ধটি বলেছে: ডকস.মাইক্রোসফট.ইন.ইউএস
এসকিএল / টি-

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

উত্তর:


11

কিছু ডিফল্ট রয়েছে যা কেবলমাত্র বিদ্যমান কারণ কেউই জানে না যে এগুলি পরিবর্তনের প্রভাব কী হবে। উদাহরণস্বরূপ, ওএস ভাষা হিসাবে "ইউএস ইংলিশ" ব্যবহার করে এমন কোনও সিস্টেমে ইনস্টল করার সময় ডিফল্ট উদাহরণস্বরূপ স্তরের কোলেশন SQL_Latin1_General_CP1_CI_ASSQL_*কোলেশনগুলি প্রাক-এসকিউএল সার্ভার 2000 সামঞ্জস্যের জন্য যেহেতু এটি কোনও অর্থ দেয় না । এসকিউএল সার্ভার 2000-এ শুরু করে আপনি আসলে একটি উইন্ডোজ কোলেশন চয়ন করতে পারেন এবং সুতরাং মার্কিন ইংলিশ সিস্টেমগুলির জন্য ডিফল্টটি রূপান্তর করা উচিত ছিল Latin1_General_CI_AS। কিন্তু, আমি অনুমান করি যে মাইক্রোসফ্টের কেউই সত্যিই জানেন না বিভিন্ন সম্ভাব্য সাব-সিস্টেম এবং সিস্টেমের সঞ্চিত প্রক্রিয়া ইত্যাদির সমস্তটিতে কী প্রভাব পড়বে really

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

সুতরাং, আমি একটি উদাহরণে কিছু পরীক্ষা করেছি যে এখনও ডিফল্ট "ব্যবহারকারীর বিকল্পগুলি" সেটিংস রয়েছে কারণ আমি এটি কখনও পরিবর্তন করি নি।

দয়া করে নোট করুন:

  • @@OPTIONS/ 'user options'একটি বিটমাস্ক মান
  • 64 এর জন্য বিট ARITHABORT ON

সেটআপ

আমি এসকিউএলসিএমডি (যা ওডিবিসি ব্যবহার করে) এবং লিনকিউপ্যাড (যা। নেট স্ক্যালক্লিয়েন্ট ব্যবহার করে) উভয়ের সাথে পরীক্ষা করেছি:

SQLCMD -W -S (local) ^
-Q"SELECT CONCAT(DB_NAME(), N': ', @@OPTIONS & 64, N' (', ses.[client_interface_name], N')') FROM sys.dm_exec_sessions ses WHERE ses.[session_id] = @@SPID;"
echo .

(এটি ^ডস লাইন ধারাবাহিকতা চরিত্র; .শেষ লাইনে অনুলিপি কেবল অতিরিক্ত লাইনটিকে অনুলিপি-আটকানো সহজ করে তোলে)

লিনকিউপ্যাডে:

using (SqlConnection connection =
    new SqlConnection(@"Server=(local);Trusted_Connection=true;Database=tempdb;"))
{
  using (SqlCommand command = connection.CreateCommand())
  {
    command.CommandText = @"SELECT @RetVal =
CONCAT(DB_NAME(), N': ', @@OPTIONS & 64, N' (', ses.[client_interface_name], N')')
FROM  sys.dm_exec_sessions ses
WHERE ses.[session_id] = @@SPID;";
    SqlParameter paramRetVal = new SqlParameter("@RetVal", SqlDbType.NVarChar, 500);
    paramRetVal.Direction = ParameterDirection.Output;
    command.Parameters.Add(paramRetVal);

    connection.Open();
    command.ExecuteNonQuery();

    Console.WriteLine(paramRetVal.Value.ToString());
  }
}

পরীক্ষা 1: আগে

এসকিউএলসিএমডি ফেরত:

master: 0 (ODBC)

লিনকিউপ্যাড ফেরত:

tempdb: 0 (.Net SqlClient Data Provider)

ডিফল্ট সংযোগ বিকল্প পরিবর্তন করুন:

নিম্নলিখিত টি-এসকিউএল ARITHABORTসেট করা হতে পারে এমন কোনও বিকল্প অপসারণ না করে এবং ARITHABORTইতিমধ্যে বিটমাস্ক মানটিতে সেট করা থাকলে কোনও পরিবর্তন না করে সক্ষম করে।

DECLARE @UserOptions INT;

-- Get current bitmasked value and ensure ARITHABORT is enabled:
SELECT @UserOptions = CONVERT(INT, cnf.[value_in_use]) | 64 -- enable "ARITHABORT"
FROM   sys.configurations cnf
WHERE  cnf.[configuration_id] = 1534 -- user options

-- Apply new default connection options:
EXEC sys.sp_configure N'user options', @UserOptions;
RECONFIGURE;

পরীক্ষা 2: পরে

এসকিউএলসিএমডি ফেরত:

master: 64 (ODBC)

লিনকিউপ্যাড ফেরত:

tempdb: 64 (.Net SqlClient Data Provider)

উপসংহার

দেত্তয়া আছে:

  1. থাকার ফলে কোনও লাভ হবে বলে মনে হয় না ARITHABORT OFF
  2. থাকার সুবিধা আছে ARITHABORT ON
  3. ডিফল্ট সংযোগ সেটিং (সংযোগ দ্বারা ওভাররাইড না করা পর্যন্ত) = OFF
  4. এটি ODBC বা OLEDB / .NET SqlClient উভয়ই সেট করার চেষ্টা করে বলে মনে হয় না ARITHABORT, সুতরাং তারা ডিফল্ট সেটিংস গ্রহণ করে

আমি ইনস্ট্যান্স-ওয়াইড ডিফল্ট সংযোগ বিকল্পগুলি (উপরে প্রদর্শিত হিসাবে) পরিবর্তন করার পরামর্শ দেব। অ্যাপ্লিকেশন আপডেট করার চেয়ে এটি কম বাধা হবে। আপনি যদি ইনস্ট্যান্স-ওয়াইড সেটিংস পরিবর্তন করতে কোনও সমস্যা পান তবে আমি কেবলমাত্র অ্যাপটি আপডেট করব ।

PS আমি পরিবর্তন একটি সহজ পরীক্ষা করেনি tempdbএবং না উদাহরণস্বরূপ ব্যাপী সেটিং পরিবর্তন এবং এটি কাজ বলে মনে হচ্ছে নি।


1
হুহ, এই বিষয়ে পল হোয়াইটের সাথে এই প্রশ্নোত্তরটি পড়ার পরে, মনে হয় যে সেট এএনএসআই_ওয়ার্নিংস চালু করার পরে, স্পষ্টতই আরথ্যাবার্টকে অনকে সেট করে। যাইহোক, যদি সংযুক্তিটিতে সেট সেটথ অফ অফও পাস করা হয়, এমনকি এএনএসআই_ওয়ার্নিংস ওভাররাইড করেও, এসকিউএল সার্ভারটি এখনও অ্যারাইটিহবার্টের মতো "অ্যাক্ট" করবে যেমন অদ্ভুত পরিকল্পনা বেছে নেওয়ার ক্ষেত্রে। আমি এটি ... মনের মধ্যে ঘোলাটে। সুতরাং কোনও সন্দেহ ছাড়াই, এটি সংযোগে সেট করা দরকার এবং সেট অফ এরিচাবার্ট অফ থাকাও সম্ভব নয়। কেস আমার চোখে বন্ধ ... sqlservercentral.com/forums/topic/…
এরিক

@ এরিকসুইগাম আকর্ষণীয় থ্রেড আপনি খুঁজে পেয়েছেন। তবে, আপনি যে তথ্যটি সংযোগে সেট করা দরকার তা থেকে আপনি কীভাবে উপসংহারে পৌঁছেছেন তা আমি দেখতে পাচ্ছি না। কিছুই বর্তমানে অগ্রাহ্য করা হয়, তাহলে আমরা জানি যে SET ARITHABORT OFFহয় না বর্তমান। তাহলে কেন এটি উপস্থিত থাকার বিষয়ে চিন্তা করবেন? কেবলমাত্র আমরা দেখেছি যেখানে ডিফল্টটি ওভাররাইড করা হয় তা হ'ল এসএসএমএস এটি সেট করে ON(যা একটি ভাল জিনিস)। যেভাবেই হোক, আমি আমার উত্তরটি পরীক্ষার সাথে আপডেট করেছি এবং যা আমি সবচেয়ে যুক্তিসঙ্গত সুপারিশ হিসাবে দেখছি (বিদ্যমান তথ্য প্রতি)।
সলোমন রুটজকি

1
আমি সম্মত, ডিফল্ট হিসাবে ইনস্ট্যান্স-ওয়াইড সেটিং সক্ষম করুন। তবে শেষ পর্যন্ত সংযোগটি সেট করা নিয়ন্ত্রণ করে। বিভিন্ন প্রযুক্তি / প্রোটোকল এসকিউএল সংযোগ করছে যেখানে ভাগ করা দৃষ্টান্তগুলির ক্ষেত্রে কী হবে? আমি বলতে চাইছি, আমাকে কি পাগল হয়ে মানুষের মতো উন্নতির দিকে ঝুঁকতে হবে এবং "SET ARITHABORT ON" করতে হবে? বা খুব কমপক্ষে, সম্ভব হলে আরথ্যাবার্টের অনুপস্থিতি প্রচার করুন .. আমি এটিকেও আজব মনে করি যে এটি আমি এখনও অবধি দেখিনি, পুরো D ষ্ঠ বর্ষটি পুরো সময়ের জন্য BA অথবা এটি সম্ভবত এটির ক্ষেত্রে খুব ভালভাবে নজর দেওয়া হয়নি case পল বা এরল্যান্ড আমাকে ব্যাক আপ করুন, এলওএল, এই কি হচ্ছে?
এরিক সুইগাম

@ এরিকসুইগাম ১) আপনি যদি উদাহরণ-স্তরের ডিফল্টটি পরিবর্তন করেন তবে আপনাকে আর কিছু বলার দরকার নেই। 2) আপনি ARITHABORT OFF যদি এর কোনও প্রকৃত ঘটনা খুঁজে পান তবে আপনাকে কেবল অনুপস্থিতির প্রচার করতে হবে। এখনও পর্যন্ত সম্ভবত কেউ নেই। ৩) যেহেতু এটি কোয়েরি পরিকল্পনাগুলিকে প্রভাবিত করে, তাই এটি হতে পারে যে টেবিলগুলির মধ্যে এসকিউএল সার্ভারকে বিবেচনা করার জন্য নির্দিষ্ট পছন্দ থাকতে পারে, যেখানে এখন আরও পছন্দ রয়েছে এবং কিছু খারাপ রয়েছে। অথবা সম্ভবত অন্যান্য ক্ষণস্থায়ী উপাদান রয়েছে যেমন তারিখের পরিসংখ্যান ইত্যাদি সম্পূর্ণরূপে নিশ্চিত নয়।
সলোমন রুটজকি

@ এরিকসুইগাম আমি আপনার সাথে সেখানে দ্বিমত পোষণ করছি না। আমি মনে করি এটি আমার উত্তরের শুরুতে (যেমন মার্কিন ইংরেজী সিস্টেমগুলির জন্য ডিফল্ট কোলিশেশন) উল্লেখ করার সাথে অনেকটা মিলে যায়: মাইক্রোসফ্টের উত্তরোত্তর সিস্টেমগুলি আপগ্রেড করার ক্ষেত্রে ত্রুটি হওয়ার আশঙ্কা (যেমন পিছনের সামঞ্জস্যের গ্যারান্টি) আসলে এর চেয়ে ভাল ক্ষতি করে অ-আদর্শ দৃশ্যের ইনস্টল-বেস / স্কোপ বাড়িয়ে তোলে। এটি অতীতে থেকে যাওয়ার জন্য ক্রমবর্ধমান টান তোলে এবং জিনিসগুলি আরও ভাল হওয়ার সম্ভাবনা বাড়ছে। এগুলি এমন ক্ষেত্রে যেখানে ব্যান্ড-এইডটি ছিঁড়ে ফেলা এবং এখনই যন্ত্রণা শেষ করা ভাল।
সলোমন রুটজকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.