আমার কি পড়ার লেনদেন প্রতিশ্রুতিবদ্ধ বা রোলব্যাক করা উচিত?


96

আমার একটি পড়ার ক্যোয়ারী রয়েছে যা আমি লেনদেনের মধ্যেই চালিত করি যাতে আমি বিচ্ছিন্নতা স্তরটি নির্দিষ্ট করতে পারি। কোয়েরিটি শেষ হয়ে গেলে আমার কী করা উচিত?

  • লেনদেন প্রতিশ্রুতিবদ্ধ
  • লেনদেনটি রোলব্যাক করুন
  • কিছুই করবেন না (যা ব্যবহারের ব্লকের শেষে লেনদেনটি আবার ঘুরিয়ে দেবে)

প্রতিটি করে করার কী কী প্রভাব আছে?

using (IDbConnection connection = ConnectionFactory.CreateConnection())
{
    using (IDbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted))
    {
        using (IDbCommand command = connection.CreateCommand())
        {
            command.Transaction = transaction;
            command.CommandText = "SELECT * FROM SomeTable";
            using (IDataReader reader = command.ExecuteReader())
            {
                // Read the results
            }
        }

        // To commit, or not to commit?
    }
}

সম্পাদনা: কোনও লেনদেন ব্যবহার করা উচিত কিনা বা লেনদেনের স্তর নির্ধারণ করার জন্য অন্যান্য উপায় থাকলেও তা নয়। প্রশ্নটি হ'ল যদি কোনও পার্থক্য হয় যে কোনও লেনদেন যা কোনও কিছুর সংশোধন না করে প্রতিশ্রুতিবদ্ধ বা ঘূর্ণিত হয়। একটি পারফরম্যান্স পার্থক্য আছে? এটি অন্যান্য সংযোগগুলিকে প্রভাবিত করে? অন্য কোন পার্থক্য?


4
আপনি সম্ভবত এটি সম্পর্কে ইতিমধ্যে জানেন, তবে আপনি যে উদাহরণ সরবরাহ করেছেন, তা দিয়ে সাধারণ জিজ্ঞাসাটি সম্পাদন করে আপনার সমতুল্য ফলাফল হতে পারে: নলোক সহ সামট্যাবল থেকে নির্বাচন করুন
জেসনট্রু

@ স্টেফান, দেখে মনে হচ্ছে যে আমরা বেশিরভাগই অবাক হয়েছি আপনি কেন কেবল পঠনযোগ্য অপারেশনে লেনদেন করতে বিরক্ত করছেন। যদি আপনি নলোকক সম্পর্কে জানেন এবং যদি আপনি তা করেন তবে আপনি কেন সেই পথে যাননি us
স্টিংজি জ্যাক

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

আহ, সেক্ষেত্রে আমি স্ক্যালসার্ভার ট্যাগটি সরিয়ে দিচ্ছি, কারণ এটি এমএসএসকিএল সার্ভারকে লক্ষ্য পণ্য হিসাবে চিহ্নিত করে।
স্টিঙ্গি জ্যাক

@ স্টেটিংজ্যাক - আপনি ঠিক বলেছেন, আমার স্ক্যালসার্ভার ট্যাগটি ব্যবহার করা উচিত হয়নি।
স্টিফান মোসার

উত্তর:


52

আপনি প্রতিশ্রুতিবদ্ধ। পিরিয়ড। আর কোন বুদ্ধিমান বিকল্প নেই। যদি আপনি কোনও লেনদেন শুরু করেন তবে আপনার এটি বন্ধ করা উচিত। প্রতিশ্রুতিবদ্ধ হওয়া আপনার কাছে থাকা কোনও লক প্রকাশিত হয় এবং এটি রিডউঙ্কিত বা সিরিয়ালিজেবল বিচ্ছিন্নতা স্তরের সাথে সমানভাবে বুদ্ধিমান ible অন্তর্নিহিত রোলব্যাকের উপর নির্ভর করা - যদিও সম্ভবত প্রযুক্তিগতভাবে সমতুল্য - এটি কেবলমাত্র খারাপ ফর্ম।

যদি এটি আপনাকে বোঝায় না, তবে কেবলমাত্র পরবর্তী লোকটি কল্পনা করুন যিনি আপনার কোডের মাঝখানে একটি আপডেট বিবৃতি সন্নিবেশ করিয়েছেন এবং সংঘটিত রোলব্যাকটি সনাক্ত করে যা তার ডেটা মুছে ফেলে।


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

4
বিভিন্ন ডিবিএমএসের বিভিন্ন 'অন্তর্নিহিত লেনদেন সমাপ্তি' শব্দার্থকতা থাকতে পারে। আইবিএম ইনফর্মিক্স (এবং আমি বিশ্বাস করি ডিবি 2) অন্তর্ভুক্ত রোলব্যাক করে; গুজব দ্বারা, ওরাকল একটি অন্তর্নিহিত অঙ্গীকার করে। আমি অন্তর্ভুক্ত রোলব্যাক পছন্দ করি।
জোনাথন লেফলার

8
ধরুন আমি একটি টেম্প টেবিল তৈরি করেছি, এটি আইডির সাহায্যে পপুলেশন করব, আইডিসের সাথে চলে যাওয়া ডেটা নির্বাচন করার জন্য এটি একটি ডেটা টেবিলের সাথে যোগ দিন, তারপরে টেম্প টেবিলটি মুছুন। আমি সত্যিই কেবল ডেটা পড়ছি, এবং টেম্প টেবিলের কী হবে তা আমি চিন্তা করি না, কারণ এটি অস্থায়ী ... তবে একটি পারফরম্যান্সের দৃষ্টিকোণ থেকে, লেনদেনটি রোলব্যাক করা বা এটি করা কি আরও ব্যয়বহুল হবে? টেম্প টেবিল এবং রিড অপারেশন ব্যতীত আর কিছুই জড়িত না হলে কমিট / রোলব্যাকের প্রভাব কী?
ট্রিইঙ্কো

4
@ ট্রাইঙ্কো - স্বজ্ঞাতভাবে, আমি অনুমান করব যে রোলব্যাক আরও ব্যয়বহুল। কমিট হ'ল সাধারণ ব্যবহারের ক্ষেত্রে এবং ব্যতিক্রমী ক্ষেত্রে রোলব্যাক করে। তবে, একাডেমিকভাবে বাদে কে পাত্তা দেয়? আমি নিশ্চিত আপনার অ্যাপ্লিকেশনটির জন্য আরও 1000 আরও ভাল অপ্টিমাইজেশন পয়েন্ট রয়েছে। আপনি যদি সত্যিই কৌতূহলী হন তবে আপনি মাইএসকিউএল লেনদেনের হ্যান্ডলিং কোড বাজারে পেয়ে যাবেন .launchpad.net
মার্ক ব্র্যাকেট

4
@ ট্রাইঙ্কো - অনুকূলকরণের একমাত্র উপায় হ'ল প্রোফাইল। এটি এমন একটি সাধারণ কোড পরিবর্তন, যদি আপনি সত্যিই এটির অনুকূলিতকরণ করতে চান তবে উভয় পদ্ধতির প্রোফাইল না করার কোনও কারণ নেই। আমাদের ফলাফল সঙ্গে আপডেট নিশ্চিত করুন!
মার্ক ব্রাকেট

28

আপনি যদি কিছু পরিবর্তন না করেন তবে আপনি একটি কমিট বা রোলব্যাক ব্যবহার করতে পারেন। হয় কেউ আপনার অর্জিত কোনও পঠিত লক প্রকাশ করবে এবং যেহেতু আপনি অন্য কোনও পরিবর্তন করেন নি, সেগুলি সমতুল্য হবে।


4
তারা সমতুল্য আমাকে জানানোর জন্য ধন্যবাদ। আমার মতে, এটি সর্বোত্তম আসল প্রশ্নের উত্তর দেয়।
চৌই

যদি আমরা কোনও বাস্তব আপডেট না দিয়ে প্রতিশ্রুতি ব্যবহার করি তবে এটি লেনদেন নিষ্ক্রিয় হবে is আমি কেবল আমার লাইভ সাইটে এটির মুখোমুখি হয়েছি
মুহাম্মদ ওমর আসলাম

6

আপনি যদি কোনও লেনদেন শুরু করেন, তবে সর্বদা সেরা অনুশীলন এটি প্রতিশ্রুতিবদ্ধ। যদি কোনও ব্যতিক্রম আপনার ব্যবহারের (লেনদেন) ব্লকের ভিতরে ফেলে দেওয়া হয় তবে লেনদেনটি স্বয়ংক্রিয়ভাবে ঘূর্ণিত হয়ে যাবে।


3

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


3

নেস্টেড লেনদেন বিবেচনা করুন ।

বেশিরভাগ আরডিবিএমএস নেস্টেড লেনদেন সমর্থন করে না বা খুব সীমিত উপায়ে সেগুলি অনুকরণ করার চেষ্টা করে।

উদাহরণস্বরূপ, এমএস এসকিউএল সার্ভারে, একটি অভ্যন্তরীণ লেনদেনের একটি রোলব্যাক (যা সত্যিকারের লেনদেন নয়, এমএস এসকিউএল সার্ভার কেবল লেনদেনের স্তরগুলি গণনা করে!) বহির্মুখী লেনদেনে যা ঘটেছিল তার সমস্ত কিছুই রোলব্যাক করবে (যা আসল লেনদেন)।

কিছু ডাটাবেস র‌্যাপারগুলি অভ্যন্তরীণ লেনদেনের একটি রোলব্যাকটিকে একটি চিহ্ন হিসাবে বিবেচনা করতে পারে যা কোনও ত্রুটি ঘটেছে এবং বহির্গামী লেনদেনের সমস্ত কিছুই রোলব্যাক করে, নির্বিশেষে বহিরাগত লেনদেনটি ঘটেছে বা রোলব্যাক করা হোক না কেন।

সুতরাং একটি কমিট হ'ল নিরাপদ উপায়, যখন আপনি অস্বীকার করতে পারবেন না যে আপনার উপাদানটি কোনও সফ্টওয়্যার মডিউল দ্বারা ব্যবহৃত হয়েছে।

দয়া করে মনে রাখবেন যে এটি প্রশ্নের সাধারণ উত্তর। কোড উদাহরণটি চতুরতার সাথে একটি নতুন ডাটাবেস সংযোগ খোলার মাধ্যমে বাইরের লেনদেনের সাথে ইস্যুটির চারপাশে কাজ করে।

পারফরম্যান্স সম্পর্কে: বিচ্ছিন্নতা স্তরের উপর নির্ভর করে SELECTs এ বিভিন্ন ধরণের LOCK এবং অস্থায়ী ডেটার (স্ন্যাপশট) প্রয়োজন হতে পারে। লেনদেন বন্ধ হয়ে গেলে এটি পরিষ্কার হয়। এটি কমিট বা রোলব্যাকের মাধ্যমে করা হয়েছে কিনা তা বিবেচ্য নয়। সিপিইউ সময় কাটাতে একটি তুচ্ছ পার্থক্য থাকতে পারে - একটি কমিট সম্ভবত রোলব্যাক (দুটি অক্ষর কম) এবং অন্যান্য ছোটখাটো পার্থক্যগুলির তুলনায় পার্স করার পক্ষে দ্রুত। স্পষ্টতই, এটি কেবল পঠনযোগ্য অপারেশনের ক্ষেত্রেই সত্য!

সামগ্রিকভাবে এর জন্য জিজ্ঞাসা করা হয়নি: অন্য প্রোগ্রামার যিনি কোডটি পড়তে পারেন তিনি ধরে নিতে পারেন যে কোনও রোলব্যাক একটি ত্রুটির শর্তটিকে বোঝায়।


2

কেবলমাত্র একটি পার্শ্ব নোট, তবে আপনি এই কোডটিও এইভাবে লিখতে পারেন:

using (IDbConnection connection = ConnectionFactory.CreateConnection())
using (IDbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted))
using (IDbCommand command = connection.CreateCommand())
{
    command.Transaction = transaction;
    command.CommandText = "SELECT * FROM SomeTable";
    using (IDataReader reader = command.ExecuteReader())
    {
        // Do something useful
    }
    // To commit, or not to commit?
}

এবং যদি আপনি জিনিসগুলিকে সামান্য খানিকটা পুনর্গঠন করেন তবে আপনি IDataReader এর জন্য ব্যবহারের ব্লকটি শীর্ষেও উপরে নিয়ে যেতে সক্ষম হতে পারেন।


1

আপনি যদি কোনও স্টোরেজ পদ্ধতিতে এসকিউএল রাখেন এবং এটিকে ক্যোয়ারির উপরে যুক্ত করেন:

set transaction isolation level read uncommitted

তাহলে আপনাকে সি # কোডের কোনও হুপের মধ্য দিয়ে ঝাঁপিয়ে পড়তে হবে না। কোনও সঞ্চিত পদ্ধতিতে লেনদেনের বিচ্ছিন্নতা স্তর নির্ধারণের ফলে সে সংযোগের সমস্ত ভবিষ্যতের ব্যবহারের ক্ষেত্রে সেটিংস প্রযোজ্য হয় না (সংযোগগুলি পোল হওয়ার পরে যা আপনাকে অন্যান্য সেটিংসের সাথে উদ্বিগ্ন হতে হবে)। সঞ্চিত প্রক্রিয়া শেষে সংযোগটি যা শুরু হয়েছিল তা কেবল ফিরে যায়।


1

রোলব্যাক বেশিরভাগ ক্ষেত্রে ত্রুটি বা ব্যতিক্রমী পরিস্থিতিতে ব্যবহার করা হয়, এবং সফল সমাপ্তির ক্ষেত্রে কমিট।

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

কেবল পঠনযোগ্য লেনদেনটি বিভিন্নভাবে যৌক্তিকভাবে "ব্যর্থ" হতে পারে, উদাহরণস্বরূপ:

  • প্রত্যাশা অনুসারে একটি ক্যোয়ারী ঠিক এক সারিতে ফিরে আসে না
  • একটি সঞ্চিত পদ্ধতি একটি ব্যতিক্রম উত্থাপন করে
  • সংগৃহীত ডেটা বেমানান বলে প্রমাণিত হয়েছে
  • ব্যবহারকারী লেনদেনটি বাতিল করে দেয় কারণ এটি অনেক বেশি সময় নিচ্ছে
  • অচলাবস্থা বা সময়সীমা

যদি কেবল ও পঠনযোগ্য লেনদেনের জন্য কমিট এবং রোলব্যাক যথাযথভাবে ব্যবহার করা হয়, তবে ডিবি রাইট কোডটি যদি কোনও পর্যায়ে যুক্ত করা হয়, যেমন ক্যাচিং, অডিটিং বা পরিসংখ্যানগুলির জন্য এটি প্রত্যাশার মতো কাজ করতে থাকবে।

অন্তর্নিহিত রোলব্যাক কেবল "মারাত্মক ত্রুটি" পরিস্থিতিতে ব্যবহার করা উচিত, যখন অ্যাপ্লিকেশন ক্রাশ হয়ে যায় বা অপ্রাপ্তযোগ্য ত্রুটি, নেটওয়ার্ক ব্যর্থতা, পাওয়ার ব্যর্থতা ইত্যাদির সাথে প্রস্থান করে etc.


0

একটি READ রাষ্ট্র পরিবর্তন করে না তা দেওয়া, আমি কিছুই করব না। প্রতিশ্রুতিবদ্ধতা সম্পাদন করা ডাটাবেসে অনুরোধটি প্রেরণের জন্য একটি চক্র অপচয় করা ব্যতীত কিছুই করবে না। আপনি কোনও অপারেশন করেননি যা অবস্থা পরিবর্তন করেছে। একইভাবে রোলব্যাকের জন্য।

তবে আপনাকে অবশ্যই আপনার অবজেক্টগুলি পরিষ্কার করতে হবে এবং আপনার সংযোগগুলি ডাটাবেসের সাথে বন্ধ করতে হবে। আপনার কোডগুলি বন্ধ না করা যদি এই কোডটি বারবার কল করা হয় তবে সমস্যা হতে পারে।


4
বিচ্ছিন্নতা স্তরের উপর নির্ভর করে একটি নির্বাচিত ক্যান লকগুলি অর্জন করতে পারে যা অন্যান্য লেনদেনগুলিতে অবরুদ্ধ করবে।
গ্রীম পেরো

সংযোগটি ব্যবহারের ব্লকের শেষে বন্ধ হয়ে যাবে - এটি এখানে রয়েছে। তবে ভাল বিষয় যে নেটওয়ার্ক ট্র্যাফিক সম্ভবত সমীকরণের সবচেয়ে ধীর অংশ।
জোয়েল কোহোর্ন 19

4
লেনদেন প্রতিশ্রুতিবদ্ধ বা একরকম বা অন্যভাবে ঘুরিয়ে দেওয়া হবে, সুতরাং সর্বোত্তম অনুশীলন হ'ল এটি সফল হলে সর্বদা একটি প্রতিশ্রুতি জারি করা।
নিল বার্নওয়েল

0

আপনি যদি অটকমিটকে মিথ্যা সেট করে থাকেন তবে হ্যাঁ।

জেডিবিসি (পোস্টগ্রাএসকিএল ড্রাইভার) নিয়ে একটি পরীক্ষায়, আমি দেখতে পেয়েছি যে যদি কোয়েরি ব্রেক হয়ে যায় (সময়সীমার কারণে), তবে আপনি রোলব্যাক না করে আপনি নতুন সিলেক্ট ক্যোয়ারী শুরু করতে পারবেন না।


-2

আপনার কোডের নমুনায়, যেখানে আপনার রয়েছে

  1. // দরকারী কিছু করতে

    আপনি কি এসকিউএল স্টেটমেন্ট কার্যকর করছেন যা ডেটা পরিবর্তন করে?

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

তবে আপনার এসকিউএল বিবৃতিতে কোনও পরিবর্তন না হলে আপনি প্রতিশ্রুতিবদ্ধ বা রোল ব্যাক করতে পারবেন না।

আপনি যদি ডেটা পরিবর্তন করে থাকেন তবে স্পষ্টভাবে কোনও ট্রানজিশন শুরু না করেই আপনি বিচ্ছিন্নতা স্তরটি পরিবর্তন করতে পারেন ... প্রতিটি স্বতন্ত্র এসকিউএল বিবৃতি কোনও লেনদেনে অন্তর্নিহিত। 2 বা ততোধিক বক্তব্য একই লেনদেনের মধ্যে রয়েছে তা নিশ্চিত করার জন্য স্পষ্টভাবে একটি লেনদেন শুরু করা আবশ্যক।

যদি আপনি যা করতে চান তা যদি লেনদেনের বিচ্ছিন্নতা স্তর নির্ধারণ করে থাকে তবে কেবল একটি আদেশের কমান্ডটেক্সটকে "লেনদেনের বিচ্ছিন্নতা স্তর পুনরাবৃত্তিযোগ্য পাঠ্য সেট করুন" (বা আপনি যে স্তরটি চান) সেট করুন, কমান্ডটাইপকে কমান্ড টাইপ.টেক্সট সেট করুন এবং কমান্ডটি কার্যকর করুন। (আপনি কমান্ড.এক্সেকিউটনকুইউয়ারি () ব্যবহার করতে পারেন)

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


// দরকারী কিছু করুন কোনও ডেটা পরিবর্তন করে না, কেবল পড়ুন। আমি যা করতে চাই তা হ'ল ক্যোয়ারির বিচ্ছিন্নতা স্তর নির্দিষ্ট করে।
স্টেফান মোসার

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

4
লেনদেনগুলি এখনও গুরুত্বপূর্ণ যদি আপনি কেবল পড়ছেন। আপনি যদি বেশ কয়েকটি পঠিত ক্রিয়াকলাপ করতে চান তবে লেনদেনের মধ্যে সেগুলি করার ফলে ধারাবাহিকতা নিশ্চিত হবে। এক ছাড়া তাদের করছেন না।
মার্কআর

হ্যাঁ দুঃখিত, আপনি ঠিক বলেছেন, আইসোলেশন স্তরটি যদি পুনরাবৃত্তিযোগ্য পড়ুন বা উচ্চতরতে সেট করা থাকে তবে কমপক্ষে এটি সত্য।
চার্লস ব্রেটানা

-3

আপনার কি অন্যদের একই ডেটা পড়তে বাধা দেওয়ার দরকার? কেন একটি লেনদেন ব্যবহার?

@ জোয়েল - আমার প্রশ্নটি আরও ভালভাবে বর্ণিত হবে "কেন একটি পাঠ্য ক্যোয়ারিতে লেনদেন ব্যবহার করবেন?"

@ স্টেফান - আপনি যদি অ্যাডহক এসকিউএল ব্যবহার করতে যাচ্ছেন এবং কোনও সঞ্চয় স্থান নয় তবে কোয়েরিতে সারণীগুলির পরে কেবল WITH (NOLOCK) যুক্ত করুন। আপনি লেনদেনের জন্য অ্যাপ্লিকেশন এবং ডাটাবেসে ওভারহেড (ন্যূনতম হলেও) ব্যয় করবেন না।

SELECT * FROM SomeTable WITH (NOLOCK)

সম্পাদনা @ মন্তব্য 3: আপনার যেহেতু প্রশ্ন ট্যাগগুলিতে "sqlserver" ছিল, তাই আমি ধরেছিলাম এমএসএসকিউএল সার্ভার লক্ষ্য পণ্য। এখন সেই বিষয়টি স্পষ্ট করা হয়েছে, আমি নির্দিষ্ট পণ্যের রেফারেন্সটি সরিয়ে দেওয়ার জন্য ট্যাগগুলি সম্পাদনা করেছি।

আপনি কেন প্রথম স্থানে একটি রিড অপে লেনদেন করতে চান তা সম্পর্কে এখনও আমি নিশ্চিত নই।


4
একসাথে সেট বিচ্ছিন্নতার স্তরে। আপনি ক্যোয়ারের জন্য লকিংয়ের পরিমাণ হ্রাস করতে লেনদেনটি ব্যবহার করতে পারেন ।
জোয়েল কোহোর্ন

4
আমি লেনদেনটি ব্যবহার করছি যাতে আমি নিম্ন বিচ্ছিন্নতা স্তরটি ব্যবহার করতে এবং লকিং হ্রাস করতে পারি।
স্টিফান মোসার

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