جمعه ۰۷ اردیبهشت ۰۳

نحوه بهينه سازي درخواست هاي MySQL

۸ بازديد

ProxySQL يك t آگاه به SQL است كه مي تواند بين برنامه شما و پايگاه داده شما قرار بگيرد. اين نرم افزار بسياري از ويژگي ها ، مانند تعادل بار بين چندين سرور مجازي MySQL را ارائه ميدهد و به عنوان يك لايه حافظه پنهان براي درخواست ها عمل ميكند. در اين آموزش به ويژگي دخيره سازي ProxySQL و نحوه بهينه سازي درخواست ها براي پايگاه داده MySQL شما پرداخته مي شود.
ذخيره سازي MySQL زماني اتفاق مي افتد كه نتيجه يك درخواست به گونه اي ذخيره مي شود كه هنگامي كه آن درخواست تكرار ميگردد ، بدون نياز به مرتب سازي در پايگاه داده ، نتيجه مي تواند برگردانده شود. اين ويژگي مي تواند سرعت درخواست هاي معمول را به ميزان قابل توجهي افزايش دهد. اما در بسياري از روش هاي ذخيره سازي ، توسعه دهندگان بايد كد برنامه خود را اصلاح كنند ، كه مي تواند يك اشكال را در پايگاه داده وارد كند. براي جلوگيري از اين عمل مستعد خطا ،ProxySQL به شما امكان مي دهد يك ذخيره سازي شفاف را انجام دهيد.
در ذخيره سازي شفاف ، فقط ادمين هاي ديتابيس بايد جهت فعال كردن حافظه پنهان براي متداول ترين درخواست ها ، پيكربندي ProxySQL را تغيير دهند و اين تغييرات مي تواند از طريق رابط ادمين ProxySQL انجام شود. همه كاري كه توسعه دهنده بايد انجام دهد اتصال به پروكسي آگاه به پروتكل است ، و پروكسي تصميم مي گيرد كه آيا درخواستي را مي توان از حافظه نهان بدون ضربه زدن به سرور مجازي back-end ارائه داد يا خير.
در اين آموزش از ProxySQL براي تنظيم ذخيره سازي شفاف براي سرور مجازي MySQL در اوبونتو 16.04 استفاده خواهيد كرد. سپس مي توانيد عملكرد آن را با استفاده از mysqlslap با و بدون حافظه پنهان آزمايش كنيد تا تأثير حافظه پنهان و مدت زمان صرفه جويي در هنگام اجراي بسياري از سؤالات مشابه را نشان دهيد.
پيش نيازها
قبل از شروع اين راهنما به موارد زير نياز خواهيد داشت:
• يك سرور مجازي Ubuntu 16.04 با حداقل 2 گيگابايت رم ، با يك كاربر غير ريشه با امتيازات sudo و فايروال تنظيم شده است ، همانطور كه در راهنماي راه اندازي سرور مجازي اوليه Ubuntu 16.04 ما گفته شده است.
مرحله 1 – نصب و تنظيم سرور مجازي MySQL
ابتدا ، سرور مجازي MySQL را نصب كرده و پيكربندي مي كنيد تا توسط ProxySQL به عنوان يك سرور مجازي back-end براي ارائه خدمات به درخواست هاي كلاينت استفاده شود.
در Ubuntu 16.04 ، سرور مجازي mysql با استفاده از اين دستور قابل نصب است:
$ sudo apt-get install mysql-server

Y را فشار دهيد تا نصب را تأييد كنيد.
سپس از شما رمزعبور كاربر روت MySQL خواسته مي شود. يك رمزعبور قوي وارد كنيد و آن را براي استفاده بعدي ذخيره كنيد.
اكنون كه سرور مجازي MySQL خود را آماده كرده ايد ، آن را پيكربندي مي كنيد تا ProxySQL به درستي كار كند. براي نظارت بر سرور مجازي MySQL ، بايد يك كاربر مانيتور براي ProxySQL اضافه كنيد ، زيرا ProxySQL به جاي استفاده از اتصال TCP يا درخواست هاي HTTP GET ، به سرور مجازي پشتيبان از طريق پروتكل SQL گوش مي دهد تا مطمئن شود كه backend  در حال اجرا است. مانيتور از يك اتصال SQL ساختگي (مجازي) براي تعيين اينكه سرور مجازي در حال كار است يا خير استفاده مي كند.
ابتدا وارد پوسته MySQL شويد:
$ mysql -uroot -p
-uroot با استفاده از كاربر روت MySQL شما را وارد مي كند و –p رمزعبور كاربر root را مي خواهد. اين كاربر روت با كاربر اصلي سرور مجازي شما متفاوت است و رمز عبور چيزي است كه هنگام نصب بسته mysql-server وارد كرده ايد.
رمز عبور اصلي را وارد كنيد و ENTER را فشار دهيد.
اكنون شما دو كاربر ايجاد خواهيد كرد ، يكي به نام مانيتور براي ProxySQL و ديگري كه براي اجراي درخواست هاي مربوط به كلاينت و ارائه امتيازات مناسب به آنها استفاده ميكنيد. اين آموزش نام اين كاربر را Sammy خواهد گذاشت.
كاربر مانيتور را ايجاد كنيد:
Mysql> CREATE USER ‘monitor’@’%’ IDENTIFIED BY ‘monitor_password’;

عبارت CREATE USER براي ايجاد يك كاربر جديد استفاده مي شود كه مي تواند از IP هاي خاص متصل شود. استفاده از٪ نشانگر اتصال كاربر از هر آدرس IP است. IDENTIFIED BY كلمه عبور را براي كاربر جديد تنظيم مي كند. هر پسوردي را كه دوست داريد وارد كنيد ، اما حتماً آن را براي استفاده هاي بعدي به خاطر بسپاريد.
پس از ايجاد مانيتور كاربر ، كاربر sammy را ايجاد كنيد:
Mysql> CREATE USER ‘sammy’@’%’ IDENTIFIED BY ‘sammy_password’;

در مرحله بعدي ، به كاربران جديد خود امتياز دهيد. براي پيكربندي مانيتور دستور زير را اجرا كنيد:
Mysql> GRANT SELECT ON sys.* TO ‘monitor’@’%’;

از درخواست GRANT براي دادن امتياز به كاربران استفاده مي شود. در اينجا فقط SELECT را در تمام جداول موجود در پايگاه داده sys به كاربر مانيتور اعطا مي كنيد. فقط به اين امتياز نياز دارد تا به سرور مجازي back-end گوش دهد.
اكنون تمام امتيازات را به كليه بانكهاي اطلاعاتي به كاربر sammy اعطا كنيد:
Mysql> GRANT ALL PRIVILEGES on *.* TO ‘sammy’@’%’;

با اين كار sammy مي تواند براي تست ديتابيس شما سؤالات لازم را ايجاد كند.
با اجراي دستور زير تغييرات امتياز را اعمال كنيد:
Mysql> FLUSH PRIVILEGES;

در آخر ، از پوسته mysql خارج شويد:
Mysql> exit;

اكنون شما سرور مجازي mysql را نصب كرده ايد و كاربري ايجاد كرده ايد كه توسط ProxySQL براي نظارت بر سرور مجازي MySQL شما استفاده مي شود ، و كاربر ديگر براي اجراي درخواست هاي كلاينت ميباشد. در مرحله بعد ProxySQL را نصب و پيكربندي خواهيد كرد.
مرحله 2 – نصب و پيكربندي سرور مجازي ProxySQL
اكنون مي توانيد سرور مجازي ProxySQL را نصب كنيد ، كه به عنوان يك لايه حافظه پنهان براي درخواست هاي شما استفاده ميشود. يك لايه حافظه پنهاني به عنوان وقفه بين سرور مجازي هاي برنامه شما و سرور مجازي هاي پشتيبان بانك اطلاعاتي وجود دارد. و براي اتصال سريع به ديتابيس و ذخيره نتايج برخي از درخواست ها در حافظه خود براي دسترسي سريع بعدي استفاده مي شود.
صفحه  ProxySQL releases Github فايلهاي نصب را براي نسخه هاي رايج لينوكس ارائه مي دهد. براي اين آموزش ، از wget براي دانلود فايل نصب نسخه ProxySQL دبيان 2.0.4 استفاده مي كنيد:
$ wget https://github.com/sysown/proxysql/releases/download/v2.0.4/proxysql_2.0.4-ubuntu16_amd64.deb

سپس ، بسته را با استفاده از dpkg نصب كنيد:
$ sudo dpkg -i proxysql_2.0.4-ubuntu16_amd64.deb

پس از نصب ، ProxySQL را با اين دستور شروع كنيد:
$ sudo systemctl start proxysql

با اين دستور مي توانيد بررسي كنيد كه ProxySQL به درستي شروع شده است:
$ sudo systemctl status proxysql

خروجي مشابه اين دريافت خواهيد كرد:
Output
root@ubuntu-s-1vcpu-2gb-sgp1-01:~# systemctl status proxysql
● proxysql.service – LSB: High Performance Advanced Proxy for MySQL
Loaded: loaded (/etc/init.d/proxysql; bad; vendor preset: enabled)
Active: active (exited) since Wed 2019-06-12 21:32:50 UTC; 6 months 7 days ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0
Memory: 0B
CPU: 0

اكنون زمان آن رسيده است كه به سرور مجازي ProxySQL خود وصل شويد. براي اين منظور ، از رابط SQL ادمين ProxySQL استفاده كنيد ، كه به طور پيش فرض درگاه 6032 را در localhost گوش مي دهد و از admin به عنوان نام كاربري و رمز عبور خود استفاده مي كند.
با اجراي دستور زير به رابط متصل شويد:
$ mysql -uadmin -p -h 127.0.0.1 -P6032

هنگام درخواست رمز عبور ، admin را وارد كنيد.
-uadmin نام كاربري را به عنوان admin تعيين مي كند و فلگ -h ميزبان را به عنوان localhost مشخص مي كند. درگاه 6032 است كه با استفاده از فلگ -P مشخص شده است.
در اينجا شما بايد ميزبان و پورت را به صراحت مشخص كنيد زيرا به طور پيش فرض ، كلاينت MySQL با استفاده از يك فايل محلي و پورت 3306 وصل مي شود.
اكنون كه به عنوان admin وارد پوسته mysql شده ايد ، كاربر مانيتور را پيكربندي كنيد تا ProxySQL بتواند از آن استفاده كند. ابتدا براي تنظيم مقادير دو متغير جهاني از درخواست هاي استاندارد SQL استفاده كنيد:
Mysql> UPDATE global_variables SET variable_value=’monitor’ WHERE variable_name=’mysql-monitor_username’;

Mysql> UPDATE global_variables SET variable_value=’monitor_password’ WHERE variable_name=’mysql-monitor_password’;

متغير mysql-monitor_username نام كاربري MySQL را مشخص مي كند كه براي بررسي اينكه سرور مجازي back-end كار ميكند يا نه ، استفاده مي شود. متغير mysql-monitor_password به گذرواژه اي كه هنگام اتصال به سرور مجازي back-end استفاده خواهد شد اشاره مي كند. از رمز عبوري كه براي نام كاربري مانيتور ايجاد كرده ايد استفاده كنيد.
هر بار كه تغييري در رابط ادمين ProxySQL ايجاد كنيد ، بايد از دستور LOAD مناسب براي اعمال تغييرات در نمونه در حال اجرا ProxySQL استفاده كنيد. شما متغيرهاي جهاني MySQL را تغيير داده ايد ، بنابراين آنها را به RUNTIME بارگذاري كنيد تا تغييرات اعمال شود:
Mysql> LOAD MYSQL VARIABLES TO RUNTIME;
در مرحله بعد ، تغييراتي را در بانك اطلاعاتي روي ديسك ذخيره كنيد تا تغييرات بين ريستارت ها ادامه يابد. ProxySQL براي ذخيره جداول و متغيرهاي خاص خود از پايگاه داده محلي SQLite خود استفاده مي كند:
Mysql> SAVE MYSQL VARIABLES TO DISK;

اكنون ، به ProxySQL در مورد سرور مجازي back-end اطلاع بدهيد. جدول mysql_servers اطلاعات مربوط به هر سرور مجازي پشتيبان را دارد كه ProxySQL مي تواند به آن متصل شود و از آن استفاده كند ، بنابراين با استفاده از يك عبارت SQL استاندارد INSERT با مقادير زير براي hostgroup_id ، hostname و port يك ركورد جديد اضافه كنيد:
Mysql> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (1, ‘127.0.0.1’, 3306);

براي اعمال تغييرات ، LOAD را اجرا كرده و دوباره SAVE كنيد:
Mysql> LOAD MYSQL SERVERS TO RUNTIME;

Mysql> SAVE MYSQL SERVERS TO DISK;
سرانجام ، به ProxySQL خواهيد گفت كه كدام كاربر به سرور مجازي back-end وصل خواهد شد. Sammy را به عنوان كاربر تنظيم كرده و sammy_password را با رمز عبوري كه قبلاً ايجاد كرده ايد جايگزين كنيد:
Mysql> INSERT INTO mysql_users(username, password, default_hostgroup) VALUES (‘sammy’, ‘sammy_password’, 1);

جدول mysql_users اطلاعات مربوط به كاربراني را كه براي اتصال به سرور مجازي هاي back-end استفاده مي شوند ، در اختيار دارد. شما username ، password و default_hostgroup را مشخص كرديد.
تغييرات را دانلود و ذخيره كنيد:
Mysql> LOAD MYSQL USERS TO RUNTIME;

Mysql> SAVE MYSQL USERS TO DISK;
سپس از پوسته mysql خارج شويد:
Mysql> exit;

براي آزمايش اينكه مي توانيد با استفاده از ProxySQL به سرور مجازي پشتيبان خود متصل شويد ، درخواست تست زير را اجرا كنيد:
$ mysql -usammy -h127.0.0.1 -p -P6033 -e “SELECT @@HOSTNAME as hostname”
در اين دستور شما از فلگ -e براي اجراي يك درخواست و بستن اتصال استفاده كرده ايد. درخواست نام ميزبان سرور مجازي back-end را چاپ مي كند.
توجه: ProxySQL به طور پيش فرض براي گوش دادن به اتصالات ورودي از پورت 6033 استفاده مي كند.
خروجي به اين شكل ظاهر مي شود ، your_hostname با نام ميزبان شما جايگزين مي شود:
Output
+—————————-+
| hostname |
+—————————-+
| your_hostname |
+—————————-+

براي كسب اطلاعات بيشتر در مورد پيكربندي ProxySQL ، به مرحله 3 نحوه استفاده از ProxySQL به عنوان Load Balancer براي MySQL در اوبونتو 16.04 مراجعه كنيد.
تاكنون ، شما ProxySQL را پيكربندي كرده ايد تا از سرور مجازي MySQL خود به عنوان backend استفاده كرده و با استفاده از ProxySQL به backend وصل شويد. اكنون ، شما آماده استفاده از mysqlslap براي تست عملكرد درخواست ها بدون ذخيره سازي هستيد.
مرحله 3 – آزمايش با استفاده از mysqlslap بدون ذخيره سازي
در اين مرحله شما يك پايگاه داده تستي را دانلود مي كنيد تا بتوانيد با استفاده از mysqlslap درخواست ها را اجرا كنيد و زمان تأخير بدون حافظه نهان را تست كنيد و معيار سرعت درخواست هاي خود را تعيين نماييد. همچنين بررسي مي كنيد كه چگونه ProxySQL سوابق درخواست ها را در جدول stats_mysql_query_digest نگه مي دارد.
mysqlslap يك كلاينت شبيه سازي بار است كه به عنوان يك ابزار تست بار براي MySQL استفاده مي شود. و مي تواند يك سرور مجازي MySQL را با درخواست هاي خودكار ايجاد شده يا برخي از درخواست هاي سفارشي كه در يك پايگاه داده اجرا مي شود ، را آزمايش كند. در بسته كلاينت MySQL نصب شده وجود دارد ، بنابراين نيازي به نصب آن نيست. در عوض ، شما يك پايگاه داده را فقط براي اهداف آزمايش دانلود مي كنيد ، كه مي توانيد از mysqlslap استفاده كنيد.
در اين آموزش از يك نمونه بانك اطلاعاتي كارمند استفاده خواهيد كرد. شما از اين پايگاه داده كارمند استفاده مي كنيد زيرا داراي مجموعه اي از داده هاي بزرگ است كه مي تواند تفاوت هاي بهينه سازي درخواست را نشان دهد. اين بانك اطلاعاتي داراي شش جدول است ، اما داده هاي موجود در آن بيش از 300000 پرونده كارمند ميباشد. اين به شما كمك مي كند تا حجم كار توليدي در مقياس بزرگ را شبيه سازي كنيد.
براي دانلود پايگاه داده ، ابتدا مخزن Github را با استفاده از اين دستور كلون كنيد:
$ git clone https://github.com/datacharmer/test_db.git

سپس دايركتوري test_db را وارد كنيد و با استفاده از اين دستورات پايگاه داده را در سرور مجازي MySQL بارگذاري كنيد:
$ cd test_db

$ mysql -uroot -p < employees.sql9 اين دستور با استفاده از تغيير مسير shell براي خواندن نمايش داده هاي SQL در فايل Staff.sql و اجراي آنها در سرور مجازي MySQL براي ايجاد ساختار پايگاه داده استفاده مي كند. خروجي مانند اين را خواهيد ديد: Output INFO CREATING DATABASE STRUCTURE INFO storage engine: InnoDB INFO LOADING departments INFO LOADING employees INFO LOADING dept_emp INFO LOADING dept_manager INFO LOADING titles INFO LOADING salaries data_load_time_diff 00:00:32 پس از بارگذاري پايگاه داده روي سرور مجازي MySQL خود ، آزمايش كنيد كه mysqlslap با درخواست زير كار كند: $ mysqlslap -usammy -p -P6033 -h127.0.0.1 –auto-generate-sql –verbose mysqlslap داراي فلگ هايي مشابه كلاينت mysql است. در اينجا موارد استفاده شده در اين دستور آمده است: -u كاربر مورد استفاده براي اتصال به سرور مجازي را مشخص مي كند. -p رمزعبور كاربر را درخواست ميكند. -P با استفاده از درگاه مشخص شده متصل مي شود. -h به هاست مشخص شده متصل مي شود. Auto-generate-sql به MySQL اجازه مي دهد تا تست بارگذاري را با استفاده از درخواست هاي توليد شده خود انجام دهد. –verbose باعث مي شود كه خروجي اطلاعات بيشتري را نشان دهد. خروجي شبيه به زير را دريافت خواهيد كرد: Output Benchmark Average number of seconds to run all queries: 0.015 seconds Minimum number of seconds to run all queries: 0.015 seconds Maximum number of seconds to run all queries: 0.015 seconds Number of clients running queries: 1 Average number of queries per client: 0 در اين خروجي مي توانيد تعداد متوسط ​​، حداقل و حداكثر تعداد ثانيه هايي را كه براي اجراي كليه درخواست ها سپري شده را مشاهده كنيد. اين به شما مقياسي از مدت زمان مورد نياز براي اجراي درخواست توسط تعدادي از كلاينت ها را نشان ميدهد. در اين خروجي ، فقط يك كلاينت براي اجراي درخواست استفاده شده است. در مرحله بعد ، با نگاهي به stats_mysql_query_digest درProxySQL ببينيد mysqlslap  كدام درخواست ها را در آخرين دستور اجرا كرده است. اين به ما اطلاعاتي مانند  digest درخواست ها را مي دهد ، كه يك شكل عادي شده از عبارت SQL است كه بعداً براي فعال كردن حافظه پكيج به آنها مراجعه مي شود. با اين دستور اينترفيس ادمين ProxySQL را وارد كنيد: $ mysql -uadmin -p -h 127.0.0.1 -P6032 سپس اين درخواست را براي يافتن اطلاعات در جدول stats_mysql_query_digest اجرا كنيد: Mysql> SELECT count_star,sum_time,hostgroup,digest,digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;

خروجي مشابه زير را مشاهده خواهيد كرد:
+————+———-+———–+——————–+———————————-+
| count_star | sum_time | hostgroup | digest | digest_text |
+————+———-+———–+——————–+———————————-+
| 1 | 598 | 1 | 0xF8F780C47A8D1D82 | SELECT @@HOSTNAME as hostname |
| 1 | 0 | 1 | 0x226CD90D52A2BA0B | select @@version_comment limit ? |
+————+———-+———–+——————–+———————————-+
2 rows in set (0.01 sec)

درخواست قبلي داده ها را از جدول stats_mysql_query_digest انتخاب مي كند ، كه شامل اطلاعات مربوط به كليه درخواست ها در ProxySQL است. در اينجا پنج ستون انتخاب شده است:
count_star: تعداد دفعاتي كه اين درخواست اجرا شد.
sum_time: زمان كل بر حسب ميلي ثانيه است كه براي اجراي اين درخواست استفاده شده است.
hostgroup: گروه ميزباني كه براي اجراي اين درخواست استفاده مي شود.
digest: دايجستي از درخواست اجرا شده.
digest_text: درخواست واقعي. در مثال اين آموزش ، درخواست دوم با استفاده از ؟ به جاي پارامترهاي متغير پارامتريزه شده است . بنابراين، select @@version_comment limit 1 و select @@version_comment limit 2 به عنوان همان درخواست با يك دايجست گروه بندي مي شوند.
اكنون كه مي دانيد چگونه داده هاي درخواست را در جدول stats_mysql_query_digest بررسي كنيد ، از پوسته mysql خارج شويد:
Mysql> exit;
بانك اطلاعاتي كه دانلود كرديد شامل برخي از جداول با داده هاي نمايشي است. اكنون با انتخاب پرونده هايي كه از from_emp آنها بزرگتر از 2000-04-20 باشد ميتوانيد درخواست ها را در dept_emp تست كنيد و ميانگين زمان اجرا را ثبت نماييد.
براي اجراي آزمون از اين دستور استفاده كنيد:
$ mysqlslap -usammy -P6033 -p -h127.0.0.1 –concurrency=100 –iterations=20 –create-schema=employees –query=”SELECT * from dept_emp WHERE from_date>’2000-04-20′” –verbose

در اينجا از چند فلگ جديد استفاده مي كنيد:
–concurrency = 100: تعداد كاربران را براي شبيه سازي تعيين مي كند ، در اين حالت 100.
–iterations=20 : باعث مي شود تست 20 بار اجرا شود و نتايج حاصل از همه آنها محاسبه شود.
–create-schema=employees: در اينجا پايگاه داده كارمندان را انتخاب كرديد.
–query=”SELECT * from dept_emp WHERE from_date>’2000-04-20′”: در اينجا درخواست اجرا شده در آزمون را مشخص كرديد.
آزمون چند دقيقه طول خواهد كشيد. پس از اتمام كار ، نتايج مشابه با موارد زير را دريافت مي كنيد:
Output
Benchmark
Average number of seconds to run all queries: 18.117 seconds
Minimum number of seconds to run all queries: 8.726 seconds
Maximum number of seconds to run all queries: 22.697 seconds
Number of clients running queries: 100
Average number of queries per client: 1

تعداد شما مي تواند كمي متفاوت باشد. اين اعداد را در جايي نگه داريد تا بعد از فعال كردن ذخيره سازي، آنها را با نتايج حاصل از مقايسه كنيد.
پس از آزمايش ProxySQL بدون حافظه پنهان ، زمان آن است كه دوباره همان تست را اجرا كنيد ، اما اين بار با فعال سازي حافظه پنهان.
مرحله 4 – آزمايش با استفاده از mysqlslap همراه با ذخيره سازي
در اين مرحله ، حافظه پنهان به ما كمك مي كند تا هنگام اجراي درخواست هاي مشابه ، تاخير را كاهش دهيم. در اينجا ، درخواست هاي اجرا شده را شناسايي مي كنيد ، دايجست آنها را از جدول stats_mysql_query_digest ProxySQL مي گيريد و از آنها براي فعال كردن حافظه پنهان استفاده مي كنيد. سپس ، دوباره تست مي كنيد تا اختلاف را بررسي كنيد.
براي فعال كردن حافظه پنهان ، بايد دايجست نمايش داده شد كه در آن ذخيره مي كنيد را بدانيد. با استفاده از اين دستور به رابط ادمين ProxySQL وارد شويد:
$ mysql -uadmin -p -h127.0.0.1 -P6032
سپس اين درخواست را مجدداً اجرا كنيد تا ليستي از درخواست ها و آنها دريافت شود:
Ysql> SELECT count_star,sum_time,hostgroup,digest,digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;

نتيجه مشابهي با اين خواهيد گرفت:
Output
+————+————-+———–+——————–+——————————————+
| count_star | sum_time | hostgroup | digest | digest_text |
+————+————-+———–+——————–+——————————————+
| 2000 | 33727110501 | 1 | 0xC5DDECD7E966A6C4 | SELECT * from dept_emp WHERE from_date>? |
| 1 | 601 | 1 | 0xF8F780C47A8D1D82 | SELECT @@HOSTNAME as hostname |
| 1 | 0 | 1 | 0x226CD90D52A2BA0B | select @@version_comment limit ? |
+————+————-+———–+——————–+——————————————+
3 rows in set (0.00 sec)

به رديف اول نگاه كنيد. در مورد درخواستي است كه 2000 بار اجرا شده است. اين يك درخواست تست شده است كه قبلاً اجرا شده است. از دايجست آن استفاده كرده و آن را ذخيره كنيد تا در افزودن يك قانون درخواست براي ذخيره سازي استفاده شود.
چند درخواست بعدي يك قانون درخواست جديد به ProxySQL اضافه خواهد كرد كه با دايجست درخواست قبلي مطابقت دارد و يك مقدار cache_ttl براي آن قرار مي دهد. cache_ttl تعداد ميلي ثانيه هايي است كه نتيجه در حافظه ذخيره مي شود:
Mysql> INSERT INTO mysql_query_rules(active, digest, cache_ttl, apply) VALUES(1,’0xC5DDECD7E966A6C4′,2000,1);

در اين دستور شما يك ركورد جديد به جدول mysql_query_rules اضافه مي كنيد. اين جدول كليه قواعد اعمال شده قبل از اجراي يك درخواست را در خود جاي داده است. در اين مثال ، شما يك مقدار براي ستون cache_ttl اضافه مي كنيد كه باعث مي شود درخواست منطبق شده توسط دايجست داده شده براي تعداد ميلي ثانيه مشخص شده در اين ستون ذخيره بماند. عدد 1 را در ستون اعمال قرار دهيد تا مطمئن شويد كه اين قانون براي درخواست ها اعمال مي شود.
اين تغييرات را LOAD و SAVE كنيد و سپس از پوست MYSQL خارج شويد:
Mysql> LOAD MYSQL QUERY RULES TO RUNTIME;

Mysql> SAVE MYSQL QUERY RULES TO DISK;

Mysql> exit;
اكنون كه حافظه پنهان فعال است ، دوباره تست كنيد تا نتيجه را بررسي كنيد:
$ mysqlslap -usammy -P6033 -p -h127.0.0.1 –concurrency=100 –iterations=20 –create-schema=employees –query=”SELECT * from dept_emp WHERE from_date>’2000-04-20′” –verbose

اين كار خروجي شبيه به زير را ارائه مي دهد:
Output
Benchmark
Average number of seconds to run all queries: 7.020 seconds
Minimum number of seconds to run all queries: 0.274 seconds
Maximum number of seconds to run all queries: 23.014 seconds
Number of clients running queries: 100
Average number of queries per client: 1

نتيجه
در اين مقاله ، حافظه نهان شفاف را با ProxySQL تنظيم كرديد تا بتواند نتايج درخواست از پايگاه داده را ذخيره كند. شما همچنين سرعت درخواست را با و بدون حافظه پنهان آزمايش كرده ايد تا تفاوتي بين caching ايجاد كنيد.
در اين آموزش از يك سطح حافظه پنهان استفاده كرده ايد. همچنين مي توانيد حافظه نهان وب را كه جلوي يك وب سرور مجازي قرار دارد و پاسخ به درخواست هاي مشابه را ذخيره مي كند ، امتحان كنيد ، بدون اينكه به سرور مجازي هاي پشتيبان ضربه بزنيد ، پاسخ را به كلاينت ارسال مي كنيد. اين بسيار شبيه به ذخيره سازي ProxySQL است اما در سطح متفاوتي است. براي كسب اطلاعات بيشتر در مورد حافظه پنهان در وب ، اصول اوليه Caching Web خود را بررسي كنيد: اصطلاحات ، هدرهاي HTTP ، و مقدمات برنامه Caching Strategies.
سرور مجازي MySQL همچنين حافظه پنهان درخواست خود را دارد. مي توانيد در مورد آموزش بهينه سازي MySQL با Query Cache در اوبونتو 18.04 اطلاعات بيشتري در مورد آن كسب كنيد.

 

 

از اين لينك ها زير مي توانيد آمورش هاي بيشتري براي لينوكس پيدا كنيد :

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

نحوه راه اندازي Eclipse Theia Cloud IDE Platform در Debian 10

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

نحوه نصب Docker Compose در Debian 10

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

نحوه اجراي صفحه گذاري در MySQL با PHP روي اوبونتو 18.04

نحوه تنظيم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

 

كلمات كليدي خريد سرور

خريد vps – خريد سرور مجازي – خريد سرور – سرور هلند – فروش vps – سرور مجازي آمريكا – خريدvps – سرور مجازي هلند – فروش سرور مجازي – سرور آمريكا – vps – سرور مجازي انگليس – سرور مجازي آلمان – سرور مجازي كانادا – خريد vps آمريكا – خريد وي پي اس – سرور – خريد سرور مجازي هلند – vps خريد – سرور مجازي فرانسه – سرور مجازي هلند – خريد vps آمريكا – خر

د – خريد vps آمريكا – خريد سرور مجازي هلند – خريد وي پي اس – خريد vps هلند – خريد vps فرانسه

تا كنون نظري ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در مونوبلاگ ثبت نام کرده اید می توانید ابتدا وارد شوید.