মাইএসকিউএল ইনোডোবি_ফ্লুশ_মোথার ভেরিয়েবলের বিষয়ে স্পষ্টতা


21

আমাকে স্বীকার করেই শুরু করা যাক আমি হার্ড ডিস্কগুলির অভ্যন্তরীণ কাজগুলি সম্পর্কে খুব অজ্ঞ। সুতরাং আমি যখন পরিবর্তনশীল ইনোডবি_ফ্লুশ_মোথডোর জন্য ম্যানুয়ালটি পড়ি তখন এটি আমাকে বিভ্রান্ত করে। O_DSYNC এবং O_DIRECT এর পার্থক্য সম্পর্কে এবং কীভাবে এটি কিভাবে ডাটাবেস সার্ভারে পারফরম্যান্সের সমস্যা রয়েছে তা কীভাবে জানতে পারি সে সম্পর্কে আমি সাধারণ লোকের পদগুলিতে ব্যাখ্যা পেতে পারি?

আমার সেটআপের কিছু পরিসংখ্যান: ম্যাক ওএসএক্স 10.6 (32-বিট কার্নেল, যেহেতু আর্কিটেকচারের মেয়াদ শেষ হয়ে গেছে) মাইএসকিউএল 5.1.49-64 বিট চালাচ্ছে (আশা করি এটি আমাকে স্মৃতি ব্যবহার করার অনুমতি দেবে)। 8 জিবি র‌্যাম, ইনডোডাব ডেটা / সূচকের 6GB GB


2
আমি জানি না ম্যাক ওএস এক্স কোনও সঠিক সরাসরি আইও বিকল্পটি সমর্থন করে কিনা - আমি মনে করি না এটি হয়েছে। আপনি আজ দ্বিতীয় ব্যক্তি যিনি আমি দেখেছি সেই ম্যানুয়াল পৃষ্ঠাটি বিভ্রান্ত হয়ে পড়েছে। আমার এখানে এটিতে একটি খোলার ত্রুটি আছে: bugs.mysql.com/bug.php?id=54306
মরগান টকার

উত্তর:


16

fdatasync()বনাম কীভাবে fsync()কাজ করে তা এখানে একটি ব্যাখ্যা is

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

  • নতুন লিখিত তথ্যের জন্য একটি রাইটিং অপারেশন
  • ইনোডে সঞ্চিত পরিবর্তনের সময় আপডেট করার জন্য একটি লিখন অপারেশন

যদি পরিবর্তনের সময়টি লেনদেন ধারণার অংশ না হয়, তবে fdatasync()অপ্রয়োজনীয় ইনোড ডিস্ক রাইটিং ক্রিয়াকলাপ এড়ানোর জন্য ব্যবহার করা যেতে পারে।

ইংরেজিতে, O_DSYNCদ্রুত চেয়ে O_DIRECTযেহেতু O_DIRECTকল fsync()দুইবার (লগ এবং অন্যটি ডেটার জন্য) এবং fsync()দুই লেখ অপারেশন মাধ্যমে যাচাই ডেটা লিখেছেন। O_DSYNCকল fdatsync()এবং ব্যবহার করে fsync()। আপনি fdatasync()একটি fsync()অ্যাসিনক্রোনাস (ডেটা যাচাইকরণ নয়) করছেন বলে ভাবতে পারেন ।

সংখ্যার দিকে তাকালে, O_DSYNCচারটি অপ্স লেখেন, যার মধ্যে দুটি যাচাই করা হয়েছে, যখন fsync()চারটি লেখার ক্রিয়াকলাপ করেন, সবগুলি পরে যাচাই করা হয়।

উপসংহার

  • O_DSYNC
    • তুলনায় দ্রুততর O_DIRECT
    • বিলম্ব বা সম্পূর্ণ ক্র্যাশের কারণে ডেটা সামঞ্জস্য হতে পারে / নাও হতে পারে
  • O_DIRECT
    • আরো স্থিতিশীল
    • ধারাবাহিক তথ্য
    • স্বাভাবিকভাবে ধীর

আমি আশা করি এই উত্তরটি সাহায্য করবে এবং আমি আশা করি যে আমি আপনার পক্ষে খারাপ কিছু তৈরি করিনি।


2
উল্লেখযোগ্যভাবে মূল্যবান: O_DIRECT কেবল লগগুলিতে নয়, কেবল টেবিল-স্পেস ফাইলগুলিতে ব্যবহৃত হয়। এছাড়াও - ও_ডিআরইসিটি কার্যকর হতে চলেছে বা না এটি হার্ডওয়ারের উপর নির্ভর করে। আমি লেখকের প্রশ্নের মন্তব্য হিসাবে একটি ওপেন ডকুমেন্টেশন বাগের সাথে লিঙ্ক করেছি।
মরগান টকার

মরগান এটি পরিষ্কার করার জন্য আপনাকে ধন্যবাদ। আমি এটি সংশোধন করব।
রোল্যান্ডোমাইএসকিউএলডিবিএ

ও_ডিএসইএনসি সিঙ্ক্রোনাস রাইটিং, আপনি কীভাবে এই সিদ্ধান্তে পৌঁছাতে পারবেন যে এটি তাত্পর্যপূর্ণ + অবিস্মরণীয়?
noonex

@ নুনেক্স এফডিট্যাসেন্স () এটির মেটাডেটা নয়, তার ডেটার জন্য সুসংগত। ইনফরমিট.আর্টিকেলস / আর্টিকেল.এএসপিএক্স? পিপি ২৩৩6১৮ এবং সেকনাম=5 অনুসারে , This means that in principal, fdatasync can execute faster than fsync because it needs to force only one disk write instead of two. However, in current versions of Linux, these two system calls actually do the same thing, both updating the file's modification time.আমি আমার পোস্টটি 3.5.। বছর আগে লিখেছিলাম, বিশেষত লিনাক্সের পুরানো সংস্করণগুলি সহ এটি সত্য ছিল।
রোল্যান্ডোমাইএসকিউএলডিবিএ

@ নুনেক্স, এন.ইউইকিপিডিয়া.আর / উইকি / সিংক_জেউনিক্স অনুসারে ) , The related system call fsync() commits just the buffered data relating to a specified file descriptor. fdatasync() is also available to write out just the changes made to the data in the file, and not necessarily the file's related metadata.( উকির সর্বশেষ আপডেট হয়েছে 28 জুলাই, 2014)।
রোল্যান্ডোমাইএসকিউএলডিবিএ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.