首頁 資料庫 mysql教程 从MySQL得到最大的性能

从MySQL得到最大的性能

Jun 07, 2016 pm 04:04 PM
mysql 任務 最佳化 複雜 效能

优化是一项复杂的任务,因为它最终需要对整个系统的理解.当用你的系统/应用的小知识做一些局部优化是可能的时候,你越想让你的系统更优化,你必须知道它也越多. 因此,本章将试图解释并给出优化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 Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

docker怎麼啟動mysql docker怎麼啟動mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

centos7如何安裝mysql centos7如何安裝mysql Apr 14, 2025 pm 08:30 PM

優雅安裝 MySQL 的關鍵在於添加 MySQL 官方倉庫。具體步驟如下:下載 MySQL 官方 GPG 密鑰,防止釣魚攻擊。添加 MySQL 倉庫文件:rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm更新 yum 倉庫緩存:yum update安裝 MySQL:yum install mysql-server啟動 MySQL 服務:systemctl start mysqld設置開機自啟動

laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

centos安裝mysql centos安裝mysql Apr 14, 2025 pm 08:09 PM

在 CentOS 上安裝 MySQL 涉及以下步驟:添加合適的 MySQL yum 源。執行 yum install mysql-server 命令以安裝 MySQL 服務器。使用 mysql_secure_installation 命令進行安全設置,例如設置 root 用戶密碼。根據需要自定義 MySQL 配置文件。調整 MySQL 參數和優化數據庫以提升性能。

See all articles