আমি কি কোনও সঞ্চিত পদ্ধতি চালু করতে এবং এটি শেষ হওয়ার অপেক্ষা না করে অবিলম্বে ফিরে আসতে পারি?


41

আমাদের কাছে একটি সঞ্চিত প্রক্রিয়া রয়েছে যা ব্যবহারকারীরা সারাদিন ক্রমাগত ব্যবহার করা প্রতিবেদনের জন্য কিছু আপডেট নম্বর পেতে ম্যানুয়ালি চালাতে পারেন।

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

কোনও সঞ্চিত পদ্ধতিতে দ্বিতীয় সঞ্চিত প্রক্রিয়া শুরু করার এবং ফলাফলের জন্য অপেক্ষা না করে অবিলম্বে ফিরে আসার কী উপায় আছে?

আমি এসকিউএল সার্ভার 2005 ব্যবহার করছি।


সঞ্চিত পদ্ধতিগুলি কীভাবে বলা হচ্ছে? এএসপি.নেট ওয়েব অ্যাপ্লিকেশন? SSRS?
মিঃ ব্রাউনস্টোন


@ মিঃ ব্রাউনস্টোন এটি সাধারণত একটি এএসপি. নেট ওয়েব অ্যাপ্লিকেশন থেকে কল করা হয়, যদিও এটির মধ্যে একটিরও বেশি লোক এটির কল হতে পারে। আমাকে ডাবল-চেক করতে হবে। এটি মাঝে মধ্যে এসএসআরএস থেকে নিজেই চালিত হয় run
রাহেল

@ মার্টিনস্মিত আমি অতীতে এসকিউএল পরিষেবা ব্রোকারের সাথে একবার কাজ করেছি এবং আশা করছি যে আরও সহজ উপায় হবে। এটি এতটা সহজ কোনও কিছুর জন্য এমন জটিল সেটআপের মতো বলে মনে হয়।
রাহেল

1
@ মার্টিনস্মিত এটি আমি যা ভাবছিলাম তা অনেকটাই - এসএসআরএস হিসাবে আপনি যা করতে পারবেন না তবে আপনি যা করতে পারছেন তা হ'ল অ্যাপ্লিকেশনটিতে রিপোর্ট ভিউয়ারকে অন্তর্ভুক্ত করা এবং এতে আপনার আরডিএল স্থানান্তরিত করা - এইভাবে অ্যাসিঙ্ক কল করা সম্ভব হবে রিপোর্টের জন্য।
মিঃ ব্রাউনস্টোন

উত্তর:


27

দেখে মনে হচ্ছে এটি সম্পাদন করার একাধিক উপায় রয়েছে তবে আমি খুঁজে পেলাম যে সহজতম উপায়টি ছিল মার্টিনের এসকিউএল জবটিতে পদ্ধতি নির্ধারণের পরামর্শ এবং আমার সঞ্চিত পদ্ধতি থেকে অ্যাসিঙ্ক্রোনাস sp_start_job কমান্ডটি ব্যবহার করে এটি শুরু করা ।

EXEC msdb.dbo.sp_start_job @job_name='Run2ndStoredProcedure'

এটি কেবলমাত্র আমার জন্য কাজ করে কারণ আমার আমার সঞ্চিত পদ্ধতির জন্য কোনও পরামিতি নির্দিষ্ট করার দরকার নেই।

অন্যান্য পরামর্শ যা আপনার পরিস্থিতির উপর নির্ভর করে কাজ করতে পারে

  • ব্যবহার SQL পরিষেবার ব্রোকার মত মার্টিন এবং সেবাস্টিয়ান সুপারিশ। এটি সেট আপ করা এবং এটি কীভাবে কাজ করে তা শেখার জটিলতায় যদি আপনি আপত্তি না দেখেন তবে এটি সম্ভবত সেরা পরামর্শ।
  • মিঃ ব্রাউনস্টোন প্রস্তাবিত , সঞ্চিত প্রক্রিয়াটি কার্যকর করার জন্য দায়বদ্ধ কোডটিতে সংবিধানে প্রক্রিয়া চালাচ্ছেন

    একটি খারাপ ধারণা নয়, তবে আমার ক্ষেত্রে সঞ্চিত প্রক্রিয়াটি একাধিক জায়গা থেকে কল হয়ে যায়, সুতরাং places সমস্ত জায়গাগুলি সন্ধান করা এবং তারা ২ য় পদ্ধতিতে কল করে তা নিশ্চিত করেও এটি বাস্তব হিসাবে মনে হয় না। এছাড়াও, ২ য় সঞ্চিত পদ্ধতিটি মোটামুটি সমালোচনামূলক এবং এটি চালাতে ভুলে যাওয়া আমাদের সংস্থার জন্য কিছু বড় সমস্যার কারণ হতে পারে।

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

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

অঙ্কুর, আমি মার্টিন একই নিবন্ধ লিঙ্ক দেখতে। আমি ব্যর্থতা / ডিআর আর্গুমেন্টের জন্য মন্তব্যটি রেখে দেব।
রেমাস রুসানু

@ রেমাসরুসানু: ভাল, এটি পরিষেবা ব্রোকার সম্পর্কিত তথ্যের অন্যতম সেরা উত্স, তবে আমি মনে করি আপনি ইতিমধ্যে জানতেন ;-)।
মারিয়ান

আমি @ রুসানুর লিঙ্কটি পছন্দ করেছি, তবে আমি কোনও প্রতিক্রিয়া ছাড়াই এমন কিছু চাইছিলাম (যা আমি মনে করি এই সমস্যার সাথে মেলে)। আমি আমার সহজ সংস্করণটি abamacus.blogspot.com/2016/05/… লিখেছি
অ্যাবাকাস

এছাড়াও যদি আপনি কোনও এসকিউএল এজেন্ট কাজ শুরু করার চেষ্টা করেন তবে এটি অ্যাজুরের সাথে দ্য EXECUTE permission was denied on the object 'sp_start_job', database 'msdb', schema 'dbo'.আরটিও নয় সার্ভিস ব্রোকার বা স্কেল এজেন্টের সাথে ব্যর্থ হবে । আমি জানি না কেন মাইক্রোসফ্ট, দেড় দশক পরে লোকেরা জিজ্ঞাসা করে, যোগ করতে অস্বীকার করে EXECUTE ASYNC RematerializeExpensiveCacheTable
আয়ান

8

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


7

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

শুধু সম্পূর্ণভাবে স্পষ্ট হতে: TSQL করে না (নিজে) দ্বারা অ্যাসিঙ্ক্রোনাস অন্যান্য TSQL অপারেশন আরম্ভ করার ক্ষমতা আছে

এর অর্থ এই নয় যে আপনার কাছে এখনও প্রচুর বিকল্প নেই:

  • এসকিউএল এজেন্ট কাজ : একাধিক এসকিউএল জব তৈরি করুন, এবং হয় তাদের যথাসময়ে চালানোর সময়সূচী করুন, বা একটি "মাস্টার কন্ট্রোল" ব্যবহার করে সঞ্চিত ব্যবহার থেকে অবিচ্ছিন্নভাবে শুরু করুন sp_start_job। আপনার যদি অগ্রগতিগতভাবে তাদের অগ্রগতি পর্যবেক্ষণ করতে হয় তবে কেবল নিশ্চিত করুন যে কাজগুলি প্রতিটি কাস্টম JOB_PROGPress টেবিল আপডেট করে (বা গ্রেগরি এ লারসেনের এই চমৎকার নিবন্ধেxp_sqlagent_enum_jobs বর্ণিত হিসাবে অননুমোদিত ফাংশনটি তারা এখনও শেষ করেছেন কিনা তা পরীক্ষা করে দেখতে পারেন )। সমান্তরাল প্রসেসগুলি চলার জন্য আপনি যতটা পৃথক কাজ তৈরি করতে চান, এমনকি যদি তারা বিভিন্ন পরামিতিগুলির সাথে একই সঞ্চিত সংগ্রহ চালাচ্ছে।
  • এসএসআইএস প্যাকেজ : আরও জটিল অ্যাসিনক্রোনাস দৃশ্যের জন্য, একটি সাধারণ ব্রাঞ্চিং টাস্ক প্রবাহের সাথে একটি এসআইএসআই প্যাকেজ তৈরি করুন। এসএসআইএস সেই কাজগুলিকে স্বতন্ত্র স্পিডে চালু করবে, যা এসকিউএল সমান্তরালভাবে সম্পাদন করবে। এসকিউএল এজেন্ট কাজ থেকে এসএসআইএস প্যাকেজ কল করুন।
  • কাস্টম অ্যাপ্লিকেশন : আপনার ভাষা পছন্দ করে নিন (সি #, পাওয়ারশেল, ইত্যাদি), সেই ভাষা দ্বারা সরবরাহিত অ্যাসিনক্রোনাস পদ্ধতি ব্যবহার করে custom প্রতিটি অ্যাপ্লিকেশন থ্রেডে একটি এসকিউএল সঞ্চিত প্রোকে কল করুন।
  • ওএল অটোমেশন : এসকিউএল-তে, গ্রেগরি এ। লারসেনের দ্বারা এই নিবন্ধে বর্ণিত হিসাবে একে অপরকে সঞ্চিত প্রোক কল করে একটি নতুন প্রক্রিয়া ব্যবহার করুন sp_oacreateএবং sp_oamethodচালু করুন ।
  • পরিষেবা ব্রোকার : ব্যবহার দেখব পরিষেবা ব্রোকার , একটি এই প্রবন্ধে অ্যাসিঙ্ক্রোনাস মৃত্যুদণ্ড ভাল উদাহরণ
  • সিএলআর প্যারালাল এক্সিকিউশন : সিএলআর কমান্ডগুলি ব্যবহার করুন Parallel_AddSqlএবং অ্যালান কাপ্লান (কেবলমাত্র এসকিউএল ২০০৫ + কেবল) দ্বারা এই নিবন্ধেParallel_Execute বর্ণিত ।
  • নির্ধারিত উইন্ডোজ টাস্ক : সম্পূর্ণতার জন্য তালিকাভুক্ত, তবে আমি এই বিকল্পের অনুরাগী নই।

এটি যদি আমি থাকতাম তবে আমি সম্ভবত একাধিক এসকিউএল এজেন্ট জবগুলি সহজ পরিস্থিতিতে ব্যবহার করতাম এবং আরও জটিল পরিস্থিতিতে একটি এসএসআইএস প্যাকেজ ব্যবহার করতাম।

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

একটি চূড়ান্ত মন্তব্য : এসকিউএল ইতিমধ্যে যখনই এটি করতে পারে * স্বতন্ত্র ক্রিয়াকলাপগুলিকে সমান্তরাল করার চেষ্টা করে। এর অর্থ হল যে একে অপরের পরিবর্তে একই সময়ে 2 টি কাজ চালানো কোনও গ্যারান্টি নয় যে এটি শীঘ্রই শেষ হবে। এটি আসলে কিছু উন্নতি করে কিনা তা সতর্কতার সাথে পরীক্ষা করুন।

আমাদের এমন বিকাশকারী ছিল যা একই সাথে 8 টি কাজ চালানোর জন্য একটি ডিটিএস প্যাকেজ তৈরি করেছিল। দুর্ভাগ্যক্রমে, এটি কেবল একটি 4-সিপিইউ সার্ভার ছিল :)

* ডিফল্ট সেটিংস ধরে নেওয়া। এটি সার্ভারের সমান্তরালতা বা অ্যাফিনিটি মাস্কের সর্বাধিক ডিগ্রী পরিবর্তন করে বা MAXDOP ক্যোয়ারির ইঙ্গিতটি ব্যবহার করে সংশোধন করা যেতে পারে।


6

হ্যাঁ, একটি পদ্ধতি:

  1. 1 ম সঞ্চিত প্রক্রিয়াটি সম্পূর্ণ হয়ে গেলে এটি দ্বিতীয় সঞ্চিত প্রক্রিয়াটি চালানোর জন্য প্রয়োজনীয় সমস্ত তথ্য সহ একটি রেকর্ড সন্নিবেশ করায়
  2. দ্বিতীয় সঞ্চিত প্রক্রিয়াটি প্রতি মিনিটে বা আপনি কখন সিদ্ধান্ত নেবেন তা চাকরি হিসাবে চলে
  3. এটি sertedোকানো রেকর্ডগুলির জন্য পরীক্ষা করে, এটির প্রক্রিয়াটি করে এবং রেকর্ডটিকে সম্পূর্ণ হিসাবে চিহ্নিত করে

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

1
@ মিঃ ব্রাউনস্টোন - সম্ভাব্যভাবে কাজটি সঞ্চালনের সময় বিভিন্ন সঞ্চিত প্রক্রিয়া কলগুলির দ্বারা কাতযুক্ত একাধিক অসামান্য কাজটি প্রক্রিয়া করতে পারে। সঞ্চিত প্রক্রিয়াটি sp_start_jobপ্রতি মিনিটে পোল এড়ানোর জন্য এটিকে শুরু করতে বা প্রয়োজন হিসাবে গতিশীলভাবে কাজ তৈরি করার জন্য কল করতে পারে তবে সেই ক্ষেত্রে জটিলতার অর্থ সম্ভবত এটি পরিষেবা ব্রোকারের চেয়ে সহজ হবে না।
মার্টিন স্মিথ

@ মার্টিনস্মিত আমার কাছে ইতিমধ্যে এই ২ য় সঞ্চিত প্রক্রিয়াটির জন্য একটি জব সেটআপ রয়েছে কারণ এটি রাতের বেলা চালানো হত যতক্ষণ না আমরা এটির প্রথম প্রক্রিয়ার সংখ্যার সাথে সঠিকভাবে সিঙ্ক না করাতে কিছু সমস্যা খুঁজে পাই। আমি যদি প্রথম সঞ্চিত প্রক্রিয়া থেকে কাজ শুরু করি, তবে এটি কি অ্যাসিঙ্ক্রোনিকভাবে চালিত হবে এবং ততক্ষণে এসপি থেকে ফিরে আসবে?
রাহেল

@ রাচেল - হ্যাঁ sp_start_jobঅবিলম্বে ফিরে। এটির কী অনুমতির প্রয়োজন তা মনে করতে পারছি না।
মার্টিন স্মিথ

1
আপনি যদি বড় বড় সুরক্ষা গর্ত খুলতে না চান তবে অন্য পদ্ধতি / ডাটাবেস থেকে কাজ শুরু করা মোটামুটি জটিল সমস্যা। এরল্যান্ড সোমমারস্কোগের বিভিন্ন কৌশলগুলির একটি নিবন্ধ রয়েছে যা আপনাকে একত্রিত করতে হবে: sommarskog.se/grantperm.html তবে, সেখানে কোনও সম্পূর্ণ সমাধান নেই।
সেবাস্তিয়ান মেইন

1

আর একটি সম্ভাব্যতা হ'ল 1 ম সংরক্ষিত পদ্ধতিটি নিরীক্ষা টেবিলের কাছে লেখার জন্য যখন এটি সম্পূর্ণ হয় এবং নিরীক্ষার টেবিলটিতে লিখিত হয় তখন 2 তম সঞ্চিত প্রক্রিয়া প্রবর্তনকারী নিরীক্ষণ টেবিলে একটি ট্রিগার স্থাপন করে। অবিচ্ছিন্নভাবে পোলিং করার প্রয়োজন নেই এবং অতিরিক্ত এসকিউএল সার্ভার এজেন্ট কাজের প্রয়োজন নেই।


3
প্রথম সঞ্চিত পদ্ধতি নিরীক্ষা টেবিল সম্পূর্ণ করেন সন্নিবেশ হওয়া অবধি ফিরবে না হবে এবং যে ঘটতে না হওয়া পর্যন্ত ট্রিগার (2nd সঞ্চিত পদ্ধতি থেকে কল সহ) নির্বাহ সমাপ্ত
মার্টিন স্মিথ

1
আমি ইতিমধ্যে একটি ট্রিগার ব্যবহারের দিকে নজর রেখেছি, তবে ট্রিগারগুলি সিঙ্ক্রোনিকভাবে INSERTবা UPDATEস্টেটমেন্ট দিয়ে চালানো হয় , তাত্পর্যপূর্ণভাবে নয়, তাই মার্টিন সঠিক যে 2 ম পদ্ধতিটি ফিরে আসার শেষ না হওয়া পর্যন্ত 1 ম পদ্ধতিটি এখনও অপেক্ষা করতে থাকবে।
রাহেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.