ড্রুপাল ডাটাবেস ইনোডাব নাকি মাইআইএসএএম?


10

আমার একটি ড্রুপাল সাইট রয়েছে এবং আমি পারফরম্যান্সের সমস্যায় ভুগছি। আমি খুঁজে পেলাম কীভাবে আমি মাইআইএসএএম থেকে একটি ডাটাবেসকে ইনোডিবিতে রূপান্তর করব? পরিবর্তিত হতে পারফরম্যান্স উন্নতি হতে পারে যে ইঙ্গিত।

আমার মাইএসকিউএল ডাটাবেসটি ইনোডিবি, বা মাইআইএসএএম কিনা তা আমি কীভাবে বলতে পারি?


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

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

1
@ ক্রিস জে লি, এটি সঠিক। মিশ্রণ সারণী প্রকারগুলি পারফরম্যান্সের কারণে, বা কেবলমাত্র কোনও নির্দিষ্ট টেবিল প্রকারের জন্য উপলব্ধ বৈশিষ্ট্যগুলি কাজে লাগাতে (যেমন, ফুলটেক্সট অনুসন্ধান ডাব্লু / মাইআইএসএএম টেবিল) ব্যবহার করা যেতে পারে। এছাড়া দুর্ঘটনা দ্বারা ঘটতে পারে যদি আপনি mysqld অক্ষমতা পরিবর্তন এবং একটি ক্যাটালগে :) আরো টেবিল তৈরি
mpdonadio

2
লেথারিয়ন: এটি কেবল সাধারণ ভুল। টেবিলের ধরণগুলি এবং যেভাবে মাইএসকিএল তাদের জন্য কনফিগার করা হয়েছে তা কার্যকারণে বিশাল প্রভাব ফেলে!
ওয়াল্টার হেক

2
@ লেথারিওন: বাস্তবে, স্থাপত্যের উন্নতিগুলি বাদ দিয়ে, মিশ্র SELECTs এবং আপডেটের সাথে চুক্তির মতো বিষয়গুলির ক্ষেত্রে খুব বড় পারফরম্যান্স লাভ s একটি আপডেটের ফলে মাইআইএসএমে একটি সারণি লক হয়ে যাবে, তবে ইনোডিবি-তে কেবল এক সারি - মানে বিশাল কর্মক্ষমতা বৃদ্ধি পেতে পারে একটি টেবিলের ইঞ্জিন পরিবর্তন ছাড়া আর কিছুই সঙ্গে দেখা হবে। এখন, আপনি যদি নির্বোধ জিজ্ঞাসা করছেন, তবে আপনি একটি নির্বোধ কোয়েরি করছেন, এবং সারণীর প্রকারগুলি পরিবর্তন করলে কোনও লাভ হবে না। কিন্তু হাত বদলানো ইঞ্জিনগুলি বরখাস্ত করা সমানভাবে ভুল।
বিএমড্যান

উত্তর:


8

আপনি একটি কাস্টম ক্যোয়ারী চালাতে পারেন:

SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name'

আপনার ডাটাবেসের সমস্ত সারণী এবং প্রতিটিটির জন্য ব্যবহৃত ইঞ্জিন তালিকাবদ্ধ করতে।

বিকল্পভাবে আপনি phpMyAdmin ব্যবহার করে আপনার ডাটাবেসে লগইন করতে পারেন এবং আপনার ডাটাবেস নির্বাচন করতে পারেন ... আপনি Typeটেবিলের তালিকার কলামে ইঞ্জিনটি দেখতে পাবেন ।

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

সূত্র: http://www.electrictoolbox.com/mysql-table-stores-engine/


পুরানো মাইএসকিউএল প্রশাসক সরঞ্জামও এ জাতীয় জিনিসের জন্য ভাল কাজ করে। আপনি যদি মাইএসকিউএল ওয়েবসাইটে ঘুরে দেখেন তবে আপনি ইনস্টলারটি খুঁজে পেতে পারেন।
এমপিডোনাদিও

@ এমপিডি বাহ এখনও চলছে? কিছুটা নস্টালজিয়ার জন্য হলেও এটি ডাউনলোড করতে হবে :)
ক্লাইভ

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

তুমি কি কমান্ড লাইন, ব্যবহার এ পিএইচপি মাই এডমিন দেখেছি অনুরূপ আউটপুট দেখার জন্য SHOW TABLE STATUS। প্রতিটি ইঞ্জিনের মধ্যে কত টেবিল রয়েছে তার একটি সাধারণ গণনা পেতে, এটি SELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE
বিএমডান

6

আমার সেরা অভিজ্ঞতাটি ছিল প্রতি টেবিলের ভিত্তিতে সিদ্ধান্ত নেওয়া। ইনোডিবি দুর্দান্ত, কারণ এটি টেবিল লক করা এড়াতে পারে (কোনও প্রক্রিয়া লেখার সময় কোনও টেবিল থেকে অন্য কোনও প্রক্রিয়া পড়তে পারে না), তবে এটি COUNT () এর সাথে ভয়ঙ্করভাবে সম্পাদন করে যা প্রায়শই পেজারের প্রশ্নের জন্য ব্যবহৃত হয়।

(সম্পাদনা করুন: দয়া করে নীচে ক্লাইভস মন্তব্য দেখুন)

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

https://github.com/rackerhacker/MySQLTuner-perl#readme


2
+1 আমি জানতাম না যে মাইএসকিউএল এর প্রাক্তন হাই পারফরম্যান্স গ্রুপ ম্যানেজারের এই নিবন্ধCOUNT অনুসারে ইনোডিবি কোয়েরিজের জন্য ধীর ছিল , যদিও এটি কেবলমাত্র একটি ধারা ছাড়াই থাকা কোয়েরিকে সত্যই প্রভাবিত করে । COUNT(*) WHERE
ক্লাইভ

3
কারণটি হ'ল মাইআইএসএএম সারণীতে সারি সংখ্যার জন্য প্রতি টেবিল মান বজায় রাখে, যার অর্থ একটি সরল SELECT COUNT(*) FROM tableসেই মান সহ তাত্ক্ষণিকভাবে ফিরে আসতে পারে। InnoDB করে না, সুতরাং এটি অবশ্যই সম্পূর্ণ প্রাথমিক কী সূচকটি স্ক্যান করবে। এটি বলেছিল যে, দ্রুপাল যখন অনেক কিছু করে SELECT COUNT(*), আমি কেবলমাত্র পুরো কোডের একটি জায়গা সম্পর্কে ভাবতে পারি যা এটি কোনও WHEREধারা ছাড়াই করে । সুতরাং, এই নির্দিষ্ট প্রান্তਕੇকের জন্য উদ্বেগের বাইরে মাইআইএসএএম ব্যবহার করবেন না। একটি শালীন আকারের বাফার পুল সহ InnoDB সমস্ত বাস্তব-বিশ্বের প্রশ্নের জন্য দ্রুততর হবে।
বিএমডান

6

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

প্রথমে কম ঝুলন্ত ফল চেষ্টা করুন, যদি এটি সাহায্য না করে তবে আসল বাধা খুঁজে পাওয়ার চেষ্টা করুন।

  1. আপনি কি বিল্ট ইন মেকানিজমগুলি চালু করেছেন: পৃষ্ঠা ক্যাশিং (কেবল বেনাম ব্যবহারকারীদের জন্য কার্যকর), সিএসএস এবং জেএস একীকরণ?
  2. আপনার হোস্ট যদি এপিসির মতো একটি অপকোড ক্যাশে সরবরাহ করে তবে এটি চালু করুন।
  3. সম্পূর্ণ ডিবি সহ আপনার ড্রুপাল স্থানীয় সেট আপ করুন।
  4. আপনার এক্সডিবেগ চলছে কিনা তা নিশ্চিত করুন।
  5. বাস্তব পারফরম্যান্স প্রোফাইলিং করা শুরু করুন। এইভাবে আপনি আপনার ওয়েবসাইটের কোন অংশটি অনেক সময় ব্যয় করে তা সনাক্ত করতে পারেন। আপনার ওয়েবসাইট যত ধীরে ধীরে দোষী কোড / উপাদান খুঁজে পাওয়া সহজ।

প্রায়শই এটি কেবল একটি ধীর ডিবি ক্যোয়ারী যার জন্য একটি সূচকের প্রয়োজন হয় বা মডিউলটি ধীর উপায়ে জিনিসগুলি করে।

আমি হোস্টদের মধ্যে বড় পার্থক্যও আবিষ্কার করেছিলাম। আপনি যদি বাক্সের বাইরে একটি নতুন দ্রুপাল ইনস্টল করেন তবে পারফর্মেন্স ঠিক আছে কি? যদি তা না হয় তবে অন্য হোস্টারের সন্ধানের সময় এসেছে।


5

FWIW আমাদের প্রায় 20 কে নোড ড্রুপাল 6.x সাইটটিতে কিছু পারফরম্যান্স সমস্যা ছিল এবং আমি সমস্ত টেবিল InnoDB এ স্থানান্তরিত করতে নির্বাচন করেছি। এটি সহজ ছিল এবং যেভাবে আমি এটি পরিচালনা করেছিলাম তা হল মাইএসকিএলডাম্পকে সমস্ত বিষয়বস্তুকে স্কয়ার ফাইলটিতে ফেলে দেওয়ার জন্য, মাইআইএসএএম-এর সমস্ত উপস্থিতি ইনোডিবি-তে প্রতিস্থাপন করতে একটি সম্পাদক (সেড) ব্যবহার করুন এবং সেই ফাইলটি থেকে ডাটাবেসটি পুনরায় লোড করুন। নীচের দিকের একটি হ'ল আপনি কোনও ইনোডিবি ডাটাবেস (আইআইআরসি) থেকে স্থান পুনরুদ্ধার করতে পারবেন না তবে যতক্ষণ আপনি নিজের নকল টেবিলগুলি আলাদা ডিবিতে রাখবেন ততক্ষণ আপনার কোনও সমস্যা হবে না। ওহ, এবং আমরা একটি উল্লেখযোগ্য কর্মক্ষমতা বৃদ্ধি দেখেছি। এবং আমাদের চারটি ড্রুপাল উদাহরণ থাকার কারণে ফাইল সিস্টেম থেকে টেবিল ফাইলগুলির নিখুঁত সংখ্যা মুছে ফেলা হয়েছিল (হ্যাঁ, এগুলি নিজেই InnoDB ফাইলের মধ্যে রয়েছে)। এটি আমার 0 .02 মূল্য।


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

1
এছাড়াও, আপনি ইন-জায়গা টেবিল রূপান্তর করতে পারেন: for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done। প্রয়োজনে -uroot -psomepassদুটি বিকল্পের জন্য উপযুক্ত বিকল্পগুলি ( উদাহরণস্বরূপ) যুক্ত করুন mysql
বিএমডান

5

শুধু একটি মাথা আপ. আপনার ড্রুপাল 6 এ থাকলে আপনি ডিবিটিউনার মডিউলটি ইনস্টল করতে পারেন ; এটি মাইআইএসএএম থেকে আপনার টেবিলগুলি সহজেই ইনোডিবিতে সরিয়ে নিতে পারে। হ্যাঁ, তার জন্য একটি মডিউল আছে!

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