mysql ডাম্প আমদানি আমার বিকাশকারীর মেশিনে অবিশ্বাস্যরূপে ধীরে ধীরে


22

আমার একটি এসকিউএল ডাম্প রয়েছে, এটি বেশ বড় (411 মেগাবাইট) এবং এটি সার্ভার এ আমদানি করতে 10 মিনিট সময় নিয়েছে, আমার ওয়ার্কস্টেশন বিতে একই আমদানিতে 8 ঘন্টা আমদানির জন্য একটি অনুমান (পাইপভিউয়ার) রয়েছে (এটি 40 মিনিটের মধ্যে 31 এমবি আমদানি করে) ) সুতরাং এটি 53 ধীর গতির।

চশমা:

Server A:
   MySQL Version: 5.5.30-1.1 (Debian)
   2 GB RAM
   1 core QEMU Virtual CPU version 1.0 - cpu MHz: 3400.020

Workstation B: 
   MySQL Version: 5.5.41-MariaDB-1ubuntu0.14.04.1
   14 GB RAM
   4 cores Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz - cpu MHz: 1600.000

মাইএসকিএল / মারিয়া কনফিগারেশন হ'ল স্টক কনফিগারেশন।

আমি গতকাল আমার ওয়ার্কস্টেশনটিতে মারিয়াডিবিতে স্যুইচ করেছি - তবে মারিয়াডিবিয়ের আগে পরিসংখ্যান আরও খারাপ ছিল।

আমি ইতিমধ্যে আমার ওয়ার্কস্টেশনের সমস্ত ডাটাবেস সরিয়েছি - কোনও পার্থক্য নেই।

বড় প্রশ্নটি হল: পারফরম্যান্স 53 ফ্যাক্টরটি ধীর হতে পারে কীভাবে? আমি এর মতো কাজ করতে পারি না :-(

আমার আমদানি আদেশ:

pv sql/master.sql | mysql -h'localhost' -u'root' -p'root' 'master'

iostat -xm 5

সার্ভার এ:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
      17,43    0,00   30,28   51,85    0,00    0,44

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0,00   254,03    0,00 1305,45     0,00     6,09     9,56     0,78    0,60    0,00    0,60   0,57  74,25

ওয়ার্কস্টেশন বি:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
       7,32    0,00    3,22    5,03    0,00   84,42

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0,00     1,40    0,80  172,40     0,00     0,56     6,72     1,17    6,75   12,00    6,72   5,40  93,52

dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc

সার্ভার এ:

1073741824 bytes (1,1 GB) copied, 18,6947 s, 57,4 MB/s

ওয়ার্কস্টেশন বি:

1073741824 bytes (1,1 GB) copied, 8,95646 s, 120 MB/s

আপনি কীভাবে আমাকে ডাটাবেস আমদানি করতে চান তা বর্ণনা করতে পারেন? (আপনার কংক্রিট মাইএসকিএল বিবৃতিটি কী) "কীভাবে প্রসেসলিস্ট দেখায়;" বলে? প্রক্রিয়াটি স্ট্রেসের সাথে কংক্রিট কী করছে আপনি দেখেছেন? আপনার মেশিনটি সম্ভবত অদলবদল করছে কিনা আপনি কি দয়া করে তা দেখতে পারেন?

আমি আমার প্রশ্ন সম্পাদনা করেছি।
অ্যালেক্স

InnoDB? innodb_buffer_pool_sizeপ্রতিটি মেশিনের মান কত ?
রিক জেমস

উত্তর:


47

এই উত্তরটি সবকিছুকে অনেক গতিময় করেছে:

/programming//a/2167641/292408

আমি সহজভাবে

SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;

শুরুতে এবং

COMMIT;
SET unique_checks=1;
SET foreign_key_checks=1;

শেষে.

এখন এটি 3 মিনিট সময় নিয়েছে।

(টুইটারের মাধ্যমে @andreasemer এর সৌজন্যে)


দুর্দান্ত কৌশল এমন কিছু যা আমার জানা দরকার, এটি করার কোনও পার্শ্ব প্রতিক্রিয়া আছে কি?
ধর্ম সাপুত্র

1
যদি আপনার ডেটা দূষিত হয় তবে বিদেশী কী সীমাবদ্ধতাগুলি আমদানির পরে পূরণ করতে পারে না।
অ্যালেক্স

চারদিকে দুর্দান্ত কাজ আপনি আমাকে আক্ষরিক ঘন্টা বাঁচিয়েছেন।
জাফো

আমার জন্য পারফরম্যান্স গতি দেয়নি। এটি ছাড়াই এটি 23 মিনিট ছিল এবং এটি 23 মিনিটের পরে (3 জিবি। এসকিএল ফাইল)।
জোশুয়া পিন্টার

5

আমি উপরে যা দেখছি তা পরিপূরণ করছে ... আমার ডাম্প ফাইলটি ইতিমধ্যে স্বয়ংক্রিয়ভাবে এমন কিছু দ্বারা উত্পন্ন হয়েছে:

mysqldump my_db > db-dump-file.sql

আমি এই আমদানি স্বয়ংক্রিয় তাই আমি নামক আমার কম্পিউটারে দুটি ফাইলের নির্মিত চান default-start-import.sqlএবং default-end-import.sqlএবং তাদের বিষয়বস্তু দ্বারা ডিফল্ট-স্টার্ট import.sql :

SET autocommit=0;

এবং ডিফল্ট-শেষ-আমদানি.এসকিউএল :

COMMIT;
SET autocommit=1;

এবং আমি যে স্ক্রিপ্টটি চালাচ্ছি এটি হ'ল এটি;

cat default-start-import.sql db-dump-file.sql default-end-import.sql | mysql my_other_db

একই কমান্ড কিন্তু পড়া সহজ:

cat default-start-import.sql \
    db-dump-file.sql \
    default-end-import.sql \
| mysql my_other_db

এই ক্ষেত্রে catপাইপগুলিতে প্রেরণের আগে এই ফাইলগুলিকে একত্রীকরণ করতে ব্যবহৃত হয়। আমি মনে করি এটি গুরুত্বপূর্ণ যে সমস্ত ফাইল একটি নতুন লাইন চরিত্রের সাথে শেষ হয় (কোনও পাঠ্য সম্পাদক থেকে যদি ফাইলের শেষে একটি ফাঁকা লাইন থাকে) যাতে catকমান্ডটি ফাইলগুলির মধ্যে লাইনগুলিকে একীভূত না করে।

আমদানিটি ঠিকঠাক কাজ করে, সক্ষম-ও-অক্ষম-অটোমোমিট জিনিসটিতে এই উন্নতির কারণে এটি যদি দ্রুততর হয় তবে আমি এটি পরীক্ষা করে দেখিনি, তবে যদি এটি জিনিসগুলিকে আরও দ্রুত করে তোলে, তবে এই অতিরিক্ত পদক্ষেপগুলি জিনিসগুলিকে সহজ করে তোলে।


1

আমি --compressপাশাপাশি চেষ্টা করেছি SET autocommit=0;এবং তারা অল্প পরিমাণে সহায়তা করেছে ...

আমি দেখতে পেয়েছি যে INSERT INTO ...একাধিক VALUES(...), (...)উন্নত গতির সাথে একাধিক বিবৃতি এক বৃহত বিবৃতিতে রূপান্তর করা ।

আমি mysqlওএসএন-এর উপর এসএসএল ব্যবহার করছি । রিমোট মাইএসকিউএল ডাটাবেসটি আমাজনে হোস্ট করা হয়।

9 টি কলাম এবং 2,100 সারি সহ:

  • 2,100 পৃথক INSERTবিবৃতি: 82 গুলি
  • 2 একীভূত INSERTবিবৃতি: <1 এস

7 কলাম এবং 42,000 সারি সহ:

  • 42,000 পৃথক INSERTবিবৃতি: 1,740s
  • 42 একীভূত INSERTবিবৃতি: 105 গুলি

সুতরাং ডাটাবেস ডাম্প তৈরির সরঞ্জামের উপর নির্ভর করে (বা আরও নির্দিষ্ট করে INSERTবিবৃতিগুলির ফর্ম্যাট ), গতিটি প্রভাবিত হতে পারে।

দ্রষ্টব্য: এটি .sqlআমার পরীক্ষায় 60% এরও বেশি ডাম্প ফাইল হ্রাস করে , সুতরাং এটি আই / ও- তেও সংরক্ষণ করবে save

সতর্কতা: আছে সঙ্গে এই কৌশল শারীরিক সীমাবদ্ধতাmysql এবং বহনযোগ্যতা প্রয়োজন তাদের জন্য ... SQL সার্ভার শুধুমাত্র 1,000 সারিতে সীমাবদ্ধ হবে বলে মনে হয় একবারে।

তবুও, 42,000 সারিগুলির জন্য একবারে 1000 সারি করা এখনও একটি 1,657% উন্নতি লাভ করে!

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