从MySQL得到最大的优化性能

Jun 07, 2016 pm 05:59 PM

从MySQL得到最大的优化性能

优化是一项复杂的任务,因为它最终需要对整个系统的理解.当用你的系统/应用的小知识做一些局部优化是可能的时候,你越想让你的系统更优化,你必须知道它也越多. 因此,本章将试图解释并给出优化MySQL的不同方法的一些例子.但是记住总是有某些(逐渐变难)是系统更快的方法留着去做. 为了使一个系统更快的最重要部分当然是基本设计.你也需要知道你的系统将做这样的事情,那就是你的瓶颈. 最常见的瓶颈是:


磁盘寻道.磁盘花时间找到一个数据,用在1999年的现代磁盘其平均时间通常小于10ms,因此理论上我们能大约一秒寻道 1000 次.这个时间用新磁盘提高很慢并且很难对一个表优化.优化它的方法是将数据散布在多个磁盘上. 当磁盘在我们需要读数据的正确位置时,磁盘读/写.用1999年的现代,一个磁盘传输类似10-20Mb/s.这必寻道更容易优化,因为你能从多个磁盘并行地读. CPU周期.当我们读数据进内存时,(或如果它已经在那里)我们需要处理它以达到我们的结果.当我们有相对内存较小的表时,这是最常见的限制因素,但是用小表速度通常不是问题. 内存带宽.当CPU需要超出适合cpu缓存的数据时,缓存带宽就成为内存的一个瓶颈.这是对大多数系统的一个不常见的瓶颈但是你应该知道它. 10.2 系统/编译时和启动参数的调节我们以系统级的东西开始,因为这些决策的某一些很早就做好了.在其他情况下,快速浏览这部分可能就够了,因为它对大收获并不重要,但是有一个关于在这个层次上收获有多大的感觉总是好的. 使用的缺省OS确实重要!为了最大程度地使用多CPU,应该使用Solaris(因为线程工作得确实不错)或Linux(因为2.2本的核心又确实不错的SMP支持).而且在32位的机器上,Linux缺省有2G的文件大小限制.当新的文件系统被释出时( XFS ),希望这不久被修正. 因为我们没在很多平台上运行生产MySQL,我们忠告你在可能选择它前,测试你打算运行的平台.


其他建议:


如果你有足够的RAM,你能删除所有交换设备.一些操作系统在某些情况下将使用一个SWAP设备,即使你有空闲的内存. 使用--skip -locking的MySQL选项避免外部锁定.注意这将不影响MySQL功能,只要它仅运行在一个服务器上.只要在你运行myisamchk以前,记得要停掉服务器(或锁定相关部分).在一些系统上这个开关是强制的,因为外部锁定不是在任何情况下都工作.当用MIT-pthreads编译时,-- skip-locking选项缺省为打开(on),因为flock()没在所有的平台上被MIT-pthreads充分支持.唯一的情况是如果你对同一数据运行MySQL服务器(不是客户),你不能使用--skip-locking之时,否则对没有先清掉(flushing)或先锁定mysqld服务器的表上运行myisamchk.你仍然能使用LOCK TABLES/ UNLOCK TABLES,即使你正在使用--skip-locking.


编译和链接怎样影响MySQL的速度


大多数下列测试在Linux上并用MySQL基准进行的,但是它们应该对其他操作系统和工作负载给出一些指示. 当你用-static链接时,你得到最快的可执行文件.使用Unix套接字而非TCP/IP连接一个数据库也可给出好一些的性能. 在Linux上,当用pgcc和-O6编译时,你将得到最快的代码.为了用这些选项编译“sql_yacc.cc”,你需要大约200M内存,因为 gcc/pgcc需要很多内存使所有函数嵌入(inline).在配置MySQL时,你也应该设定CXX=gcc以避免包括libstdc++库(它不需要). 只通过使用一个较好的编译器或较好的编译器选项,在应用中你能得到一个10-30%的加速.如果你自己编译SQL服务器,这特别重要! 在Intel上,你应该例如使用pgcc或Cygnus CodeFusion编译器得到最大速度.我们已经测试了新的 Fujitsu编译器,但是它是还没足够不出错来优化编译MySQL.



这里是我们做过的一些测量表:


如果你以-O6使用pgcc并且编译任何东西,mysqld服务器是比用gcc快11%(用字符串99的版本). 如果你动态地链接(没有-static),结果慢了13%.注意你仍能使用一个动态连接的MySQL库.只有服务器对性能是关键的. 如果你使用TCP/IP而非Unix套接字,结果慢7.5%. 在一个Sun SPARCstation 10上,gcc2.7.3是比Sun Pro C++ 4.2快13%. 在Solaris 2.5.1上,在单个处理器上MIT-pthreads比带原生线程的Solaris慢8-12%.以更多的负载/cpus,差别应该变得更大. 由TcX提供的MySQL-Linux的分发用pgcc编译并静态链接.


正如前面所述,磁盘寻道是一个性能的大瓶颈.当数据开始增长以致缓存变得不可能时,这个问题变得越来越明显.对大数据库,在那你或多或少地要随机存取数据,你可以依靠你将至少需要一次磁盘寻道来读取并且几次磁盘寻道写入.为了使这个问题最小化,使用有低寻道时间的磁盘. 为了增加可用磁盘轴的数量(并且从而减少寻道开销),符号联接文件到不同磁盘或分割磁盘是可能的. 使用符号连接这意味着你将索引/数据文件符号从正常的数据目录链接到其他磁盘(那也可以被分割的).这使得寻道和读取时间更好(如果磁盘不用于其他事情).见10.2.2.1 使用数据库和表的符号链接. 分割分割意味着你有许多磁盘并把第一块放在第一个磁盘上,在第二块放在第二个磁盘上,并且第 n块在第(n mod number_of_disks)磁盘上,等等.这意味着,如果你的正常数据大小于分割大小(或完美地排列过),你将得到较好一些的性能.注意,分割是否很依赖于OS和分割大小.因此用不同的分割大小测试你的应用程序.见10.8 使用你自己的基准.注意对分割的速度差异很依赖于参数,取决于你如何分割参数和磁盘数量,你可以得出以数量级的不同.注意你必须选择为随机或顺序存取优化. 为了可靠,你可能想要使用袭击RAID 0+1(分割+镜像),但是在这种情况下,你将需要2*N个驱动器来保存N个驱动器的数据.如果你有钱,这可能是最好的选择!然而你也可能必须投资一些卷管理软件投资以高效地处理它. 一个好选择是让稍重要的数据(它能再生)上存在RAID 0磁盘上,而将确实重要的数据(像主机信息和日志文件)存在一个RAID 0+1或RAID N磁盘上.如果因为更新奇偶位你有许多写入,RAID N可能是一个问题. 你也可以对数据库使用的文件系统设置参数.一个容易的改变是以noatime选项挂装文件系统.这是它跳过更新在inode中的最后访问时间,而且这将避免一些磁盘寻道.


你可以从数据库目录移动表和数据库到别处,并且用链接到新地点的符号代替它们.你可能想要这样做,例如,转移一个数据库到有更多空闲空间的一个文件系统. 如果MySQL注意到一个表是一个符号链接,它将解析符号链接并且使用其实际指向的表,它可工作在支持realpath()调用的所有系统上(至少 Linux和Solaris支持realpath())!在不支持realpath()的系统上,你应该不同时通过真实路径和符号链接访问表!如果你这样做,表在任何更新后将不一致. MySQL缺省不支持数据库链接.只要你不在数据库之间做一个符号链接,一切将工作正常.假定你在MySQL数据目录下有一个数据库db1,并且做了一个符号链接db2指向db1:


shell&> cd /path/to/datadir

shell&> ln -s db1 db2

现在,对在db1中的任一表tbl_a,在db2种也好象有一个表tbl_a.如果一个线程更新db1.tbl_a并且另一个线程更新db2.tbl_a,将有问题. 如果你确实需要这样,你必须改变下列在“mysys/mf_format.c”中的代码:


if (!lstat(to,&stat_buff)) /* Check if it's a symbolic link */

if (S_ISLNK(stat_buff.st_mode) && realpath(to,buff))


把代码改变为这样:


if (realpath(to,buff))
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQLの役割:Webアプリケーションのデータベース MySQLの役割:Webアプリケーションのデータベース Apr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

Innodb Redoログの役割を説明し、ログを元に戻します。 Innodb Redoログの役割を説明し、ログを元に戻します。 Apr 15, 2025 am 12:16 AM

INNODBは、レドログと非論的なものを使用して、データの一貫性と信頼性を確保しています。 1.レドログは、クラッシュの回復とトランザクションの持続性を確保するために、データページの変更を記録します。 2.Undologsは、元のデータ値を記録し、トランザクションロールバックとMVCCをサポートします。

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

MySQL対その他のプログラミング言語:比較 MySQL対その他のプログラミング言語:比較 Apr 19, 2025 am 12:22 AM

他のプログラミング言語と比較して、MySQLは主にデータの保存と管理に使用されますが、Python、Java、Cなどの他の言語は論理処理とアプリケーション開発に使用されます。 MySQLは、データ管理のニーズに適した高性能、スケーラビリティ、およびクロスプラットフォームサポートで知られていますが、他の言語は、データ分析、エンタープライズアプリケーション、システムプログラミングなどのそれぞれの分野で利点があります。

MySQL:中小企業から大企業まで MySQL:中小企業から大企業まで Apr 13, 2025 am 12:17 AM

MySQLは、中小企業に適しています。 1)中小企業は、顧客情報の保存など、基本的なデータ管理にMySQLを使用できます。 2)大企業はMySQLを使用して、大規模なデータと複雑なビジネスロジックを処理して、クエリのパフォーマンスとトランザクション処理を最適化できます。

MySQL Index Cardinalityはクエリパフォーマンスにどのように影響しますか? MySQL Index Cardinalityはクエリパフォーマンスにどのように影響しますか? Apr 14, 2025 am 12:18 AM

MySQLインデックスのカーディナリティは、クエリパフォーマンスに大きな影響を及ぼします。1。高いカーディナリティインデックスは、データ範囲をより効果的に狭め、クエリ効率を向上させることができます。 2。低カーディナリティインデックスは、完全なテーブルスキャンにつながり、クエリのパフォーマンスを削減する可能性があります。 3。ジョイントインデックスでは、クエリを最適化するために、高いカーディナリティシーケンスを前に配置する必要があります。

初心者向けのMySQL:データベース管理を開始します 初心者向けのMySQL:データベース管理を開始します Apr 18, 2025 am 12:10 AM

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

MySQL対その他のデータベース:オプションの比較 MySQL対その他のデータベース:オプションの比較 Apr 15, 2025 am 12:08 AM

MySQLは、Webアプリケーションやコンテンツ管理システムに適しており、オープンソース、高性能、使いやすさに人気があります。 1)PostgreSQLと比較して、MySQLは簡単なクエリと高い同時読み取り操作でパフォーマンスが向上します。 2)Oracleと比較して、MySQLは、オープンソースと低コストのため、中小企業の間でより一般的です。 3)Microsoft SQL Serverと比較して、MySQLはクロスプラットフォームアプリケーションにより適しています。 4)MongoDBとは異なり、MySQLは構造化されたデータおよびトランザクション処理により適しています。

See all articles