浅谈VPS主机上的数据库性能优化

如何提高网站性能?一个显而易见的解决方案是升级托管账户。您的网站将拥有更多硬件资源,因此可以同时处理更多请求并更快地传递数据。

无论如何,人们都是这么认为的。但事实总是不一样。

现代网站是一个复杂的系统,包含许多必须协同工作的组件。如果其中一个出现故障,那么整个项目就会变得非常缓慢,无论托管服务器有多强大。其中最重要的组件之一就是数据库

今天,我们将深入了解数据库的工作原理、导致数据库速度变慢的原因以及如何优化数据库。

数据库性能优化的重要性

在万维网的早期,网站几乎完全由 HTML和媒体文件组成。用户输入网站的 URL 后,网络服务器会将所需的文件提供给浏览器,以将其呈现为可见的文本和图片。每个访问者都会看到相同的内容,他们所能做的就是点击超链接来浏览不同的页面和图片

现在情况已经大不相同了。

我们经常会同时运行多个脚本和应用程序,以便将最简单的页面变成一个交互式网站。此类解决方案可以实现博客文章下的评论等简单功能,但也可用于支付、订单、订阅等更复杂的事情。如果没有数据库,这一切都不可能实现。

每次用户与您的网站互动时,您的网络应用程序都会向数据库发送请求(或查询),要求其存储新的数据记录或提供现有数据记录。处理这些查询的速度对于网站的整体性能至关重要。

但是你究竟如何判断你的数据库是否快速呢?

由于变量太多,回答这个问题相当棘手。数据库主要有两种类型,还有几十种不同的数据库管理系统 (DBMS),每种都有各自的数据处理机制。 

每个系统都有自己的速度监控和测量工具,可以帮助您跟踪性能。不过,数据库操作中需要审查的方面通常是相同的。 

他们来了:

  • 响应时间——响应时间衡量数据库处理查询并将结果返回给用户所需的时间。您可能会认为这不是最准确的指标。没有两个查询是相同的,并且您在任何给定时间获得的平均响应时间取决于许多不同的因素。

然而,这是用户最关注的指标,你绝对应该关注它。如果平均响应时间增加,网站的整体性能就会下降,所以是时候采取措施了。

  • 查询性能 –查询结构对数据库提供所需数据的时间起着重要作用。通过监控单个查询的性能,数据库管理员可以找出速度慢的查询并采取必要的预防措施对其进行优化。
  • 查询吞吐量——吞吐量是指数据库一次可以处理的信息量。一方面,管理员必须知道这个量是多少,以便相应地扩展托管环境。但是,他们还必须知道数据是如何传递的。

    它可以在少量大型查询中处理,也可以是许多较小查询的结果。这些信息可帮助管理员制定计划并确定他们将使用哪些优化技术。

  • 数据库事件 –数据库事件是围绕在数据库中存储、修改或删除数据的事件。用户和应用程序都可能引发数据库事件。

    例如,访问者设置新帐户或应用程序自动清理错误日志。一次发生太多事件可能会减慢数据库速度,尤其是在繁忙时段发生时。系统管理员的工作就是避免这种情况。

  • 打开数据库连接 –数据库连接促进了软件应用程序用户与数据库之间的通信。在任意时刻打开的连接越多,使用的带宽就越多。然而,新的连接请求对性能和资源使用的影响更大。

这就是为什么连接池的概念越来越受欢迎。连接池是开放数据库连接的缓存,可在用户和软件应用程序之间共享。有了它,访问者就不需要一直发送新请求,而是使用已经打开的连接之一。这可以减少延迟并提高整体性能。

  • 数据库错误 –数据库错误通常会导致网站完全崩溃。页面无法访问,访问者看到的只是白色背景和一条错误消息,普通人可能看不懂。

用户可能会点击离开,并且永远不会再回到您的网站,这对您的业务来说并不理想。这就是为什么尽快识别和解决任何数据库错误至关重要。

然而,在监控和优化数据库之前,您需要知道它使用了什么样的技术。

选择正确的数据库和 DBMS

选择正确的数据库管理系统不仅对网站性能至关重要,而且对整个项目的未来也至关重要。不过,在向您展示如何做到这一点之前,我们需要澄清一些概念。

首先,我们需要讨论两种主要的数据库类型:

  • 关系数据库 –关系数据库也称为SQL 数据库,因为它们使用结构化查询语言。以这种格式存储的每一点信息都放在表中。您的DBMS 会在不同的表之间建立关系,以便可以更快、更高效地检索和提供数据。

关系数据库采用更简单的数据存储方法。SQL语法易于理解,结构消除了存储重复条目的可能性。

相反,关系数据库设计为在单台机器上运行,因此无法水平扩展。如果您的项目增长到单台服务器不再足够强大的程度,这可能会成为一个问题。

  • 非关系型数据库 –非关系型数据库也称为NoSQL(Not Only SQL)。NoSQL 数据库使用多种存储方法来保存信息。有些将信息保存在文件中,有些使用列和表(它们之间没有关系),有些则依赖于复杂的节点网络。

非关系型数据库可以存储更多样化的数据结构,并且由于它们可以在多台服务器上水平扩展,因此它们也非常适合拥有大量数据的大型网站。但是,对于需要处理标准化数据集的常规网站来说,使用非关系型数据库可能会带来不必要的麻烦。

是否使用关系数据库或非关系数据库主要取决于您要构建的站点类型。大多数内容管理系统和网站构建应用程序(如WordPress、Joomla、Drupal、Magento 等)都使用 SQL 数据库,这有几个原因。

首先,许多此类平台的起源可以追溯到 21 世纪初,当时非关系型数据库的管理比现在更加复杂。第二个也是更重要的原因是,大多数Web 应用程序生成的数据往往是可预测的。数据类型有限,结构很少发生变化。

最终,您使用的数据库类型取决于项目的要求。DBMS也是如此。DBMS位于用户或应用程序与数据库之间。它负责处理客户端和服务器之间的查询。 

有很多选择。如果您使用 SQL 数据库,则可以从以下选项中进行选择:

  • MySQL
  • 玛拉雅数据库
  • 微软 SQL 服务器
  • PostgreSQL
  • SQLite

NoSQL 的选择比较有限,最受欢迎的选项是MongoDBRedis。某些专有产品(例如 Oracle DBMS)可同时适用于关系数据库和非关系数据库。

再次强调,主要考虑因素是查看您用于构建网站的软件支持哪些 DBMS。有些应用程序设计为仅使用一种特定的数据库技术,而其他应用程序则支持多种选项。

选择哪一个取决于许多因素,包括项目规模、增长潜力、构建项目使用的工具以及预算。逐一考虑所有因素,然后放弃不合适的选项,直到剩下几个候选者。 

选择范围缩小后,您需要并排比较不同的 DBMS 及其功能。那时您会注意到各个系统之间的某些差异可能会直接影响您的数据库性能。

例如,如果你将MySQL 和 MariaDB进行直接比较,你会发现后者拥有更多的存储引擎和速度优化选项。如果性能是主要考虑因素,那么天平的倾斜点应该很明显。

最后,选择正确的 DBMS 取决于深入的分析和对优先级的仔细安排。

大多数托管主机帐户都带有一系列技术,其中包括数据库管理系统。由于大多数网站都使用关系数据库,因此典型的设置通常具有SQL DBMS。

总体而言,关系数据库更受欢迎,因此我们今天向您展示的优化技术主要围绕它们展开。

数据库索引和查询优化

浅谈VPS主机上的数据库性能优化

数据库查询越快,网站就越快。查询执行速度取决于许多不同的因素,包括服务器的性能、同时连接的数量、缓冲区和内存缓存配置等。

然而,确保快速交付数据的最简单方法之一是更好地组织数据。如果您使用关系数据库,最简单的方法之一就是实施索引策略。让我们看一个假设的例子来演示索引的工作原理。

假设您有一个包含 230,000 行的数据库表 - 大约相当于现代英语词典中的条目数。第一列包含 ID,第二列包含单词或短语,第三列包含其各自的定义。条目不按字母顺序排列。

用户想要找到位于第 200,000 行的单词“database”的定义。DBMS 要做的是将表加载到内存中,从最顶部开始,遍历每一行,直到找到正确的行。换句话说,要执行单个查询,您的数据库需要读取 199,999 行。这绝不是最有效的方法,这也是索引存在的原因。

索引是数据库中的独立数据结构。它包含数据库表中一个或多个列的副本,以及指向相关数据所在位置的指针。

在我们的例子中,我们有一个索引,其中包含包含单词和指针的列的副本,这些指针告诉 DBMS 每个条目在主表上的位置。因为这是一个单独的数据结构,所以我们可以按字母顺序排列单词和短语,而不会造成任何其他损害(例如弄乱 ID)。这种索引的好处是双重的。

首先,DBMS 使用字母顺序快速在索引中定位单词。它不会逐一检查 230,000 个单词和短语,而是会检查索引中的第115,000 个条目(中间点),并确定单词“database”按字母顺序排在其之前还是之后。我们假设在第 115,000 个条目下有单词“microscope”,因此“database”肯定在其上方。

“Microscope”及其下面的所有条目都将从搜索中消除。DBMS 将重复相同的过程几次,直到在索引中找到“数据库”条目。这比读取数据库中的每一行要高效得多。

然后,在索引中找到条目后,数据库就拥有了包含相关数据的数据块的坐标。因此,它可以检索定义,而无需将整个数据库表加载到内存中。这使得它更快、更高效

有什么缺点吗?好吧,作为一个单独的结构,索引不可避免地会占用一些额外的存储空间。此外,您需要仔细选择和组合要添加到索引中的列。理想情况下,您希望索引经常搜索和使用的数据。

然而,巨大的性能优势远远超过任何缺点。

但是如何创建数据库索引?

一个选项是使用CREATE INDEX SQL语句。该语句有详尽的文档,对于具有一定SQL 经验的人来说应该不会有太大的挑战。那些不太习惯使用命令行的人会更喜欢使用基于 GUI 的工具,例如phpMyAdmin

步骤如下:

1. 通过控制面板打开 phpMyAdmin。如果您使用 SPanel,您可以在用户界面主页的数据库部分下找到图标。

优化托管 VPS 主机上的数据库性能,但是如何创建数据库索引?

2. 从左侧菜单中选择您想要修改的数据库。

优化托管 VPS 主机上的数据库性能,但如何创建数据库索引? 2

3. 主屏幕现在将显示所选数据库中的所有表。单击您想要索引的表。

优化托管 VPS 主机上的数据库性能,但如何创建数据库索引? 3

4. 转到“结构”选项卡。您将看到表中的所有列。使用复选框选择要添加到索引的列,然后单击列表下方的“索引”按钮。

优化托管 VPS 主机上的数据库性能,但如何创建数据库索引?4

如果数据没有损坏,phpMyAdmin应该会显示一条消息,表明操作成功。

注意: 请记住,您正在更改数据库 - 数据库是网站的主要组件之一。在尝试创建索引之前,最好先对网站和数据库进行完整备份,以防出现问题。

内存管理和缓冲

VPS主机上的数据库性能优化方法

缓冲就是高效利用可用的硬件资源。更具体地说,它显示了数据库管理系统如何使用服务器的 RAM 来加快查询执行速度。

每当 DBMS 需要从数据库读取或向数据库写入信息时,它都会将记录的副本保存到服务器的内存中。然后,它会收到对相同数据位的请求,并从 RAM 中获取副本。

为什么会这样?

这是因为从内存提供数据比从磁盘提供数据要快得多。速度差异取决于许多因素,但即使将尖端的 NVMe SSD 与标准 RAM进行比较,我们谈论的也是从内存读取数据时的性能快几倍。您可能已经猜到了,这一切都对整体加载速度和用户体验产生了深远的影响。

显然,服务器内存不是无限的,因此数据库无法在其中存储无限量的数据。实际上,您的数据库会分配一定量的内存,专门用于缓存数据。这被称为缓冲区,如果您的站点使用 InnoDB 存储引擎,则其默认容量为 128MB。

这听起来不算多,有些人听到可以更改它时会很高兴。但是,请记住,增加缓冲区大小不一定能解决所有问题。 

部分原因是,为缓冲区分配更多 RAM 会导致对网站性能至关重要的其他组件失去正常运行所需的资源。缓冲区的大小不一定是主要的性能障碍。

这就是为什么,如果数据库的缓冲区存在问题,您就需要更细致地处理该问题。

以下是您可能需要密切关注的一些指标:

  • 缓冲池命中率 –此指标显示所有查询中有多少百分比由缓冲区响应以及哪些查询通过磁盘。默认情况下,DBMS将通过缓冲区处理尽可能多的查询。但是,如果请求针对的是未存储在内存中的页面,它将被中继到磁盘,并且其处理速度会慢得多。

    这就是为什么尽可能保持缓冲池命中率至关重要。专家建议将数据库配置为大约 90% 的所有查询都由缓冲区处理。

  • 页面预期寿命——存储在缓冲区中的每个记录副本都会在一段时间后被删除。数据库越忙,这个时间段就越短。监控数据记录从缓冲区中删除的频率将为您提供平均页面预期寿命——该指标可以帮助您提高数据库的性能。

    传统上认为合理的页面预期寿命在 300 秒左右。然而,这个结论是在服务器性能较低的时候得出的。如今,每 4GB RAM 的平均页面预期寿命为 300 秒被认为是正常的。服务器越忙,从缓冲区中删除页面的频率就越高。这会降低页面预期寿命并增加缓冲区无法处理的请求数量。由于磁盘速度太慢,网站的整体性能不可避免地会受到影响。
     

  • 页面读取次数/秒 –此指标表示每秒从磁盘读取的数据量。您希望将其保持在尽可能低的水平,因为无论现代 SSD 有多快服务器磁盘处理的查询仍然相对较慢。有许多方法可以最大限度地减少磁盘在数据库查询执行中的作用。您可以通过提供足够大小的缓冲区来缓存经常搜索的数据来实现这一点,但您也可以确保信息被正确索引,以便 DBMS 可以更快地找到它。

管理数据库缓冲区大小

有很多方法可以监控数据库缓冲池的运行状况。例如,MySQL Workbench是一款免费的基于 GUI 的数据库管理工具,它有一个性能仪表板,显示各种统计数据,包括缓冲池使用情况、读/写请求、每秒磁盘读取次数等。

优化托管 VPS 主机上的数据库性能,管理数据库缓冲区大小

更改缓冲区的大小更为复杂。它需要修改 MySQL 的主配置文件 - my.cnf。其确切位置取决于操作系统。大多数基于 Red Hat 的Linux 发行版将其存储在/etc/文件夹中。您需要添加或修改的变量取决于存储引擎。如果您使用 InnoDB - 它是innodb_buffer_pool_size对于MyISAM 驱动的数据库,它是key_buffer_size

利用缓存机制

正如我们在上一节中发现的那样,关系数据库具有内置机制,可将信息存储在内存中以便更快地检索。换句话说,它实际上有一个开箱即用的缓存系统。鉴于此,您可能会认为实施其他缓存解决方案是不必要的。

事实并非如此。

大多数缓存解决方案都关注静态数据,如图像、CSS 样式表和 JavaScript 文件,但一些高级系统也可以将数据库生成的数据存储在服务器的 RAM 中以加快传输速度。 

它们在许多关键领域的表现都优于默认缓冲池,其中包括:

  • 缓存存储方法 –数据库的缓冲区包含具有多个表行和记录的信息页面。专用解决方案构建的缓存往往组织得更好。
  • 数据检索机制——缓存解决方案依赖于复杂的键/值系统来定位所需数据,从而实现更快的交付。
  • 可扩展性——专用缓存解决方案是为各种类型和规模的项目而构建的。因此,即使您的网站规模不断扩大,它们也可以支持您的项目并确保出色的性能。

缓存系统有几十种,各有优缺点。然而,说到数据库缓存,有两种解决方案脱颖而出。让我们来看看。

Memcached

Memcached 于二十多年前首次发布,多年来,它已成为许多开发堆栈不可或缺的一部分。它因其先进的多功能性而受到网站所有者的欢迎。它支持最流行的编程语言,并具有易于使用的 API,因此配置您的应用程序以使用它应该没有问题。MySQL数据库的特殊插件使设置变得快速而简单。

Memcached 还支持分布式架构,这意味着缓存数据可以同时存储在多个节点上。这听起来相当昂贵,但由于Docker 和 Kubernetes等容器化和虚拟化解决方案,情况就不再如此了。

同时,使用多个节点不仅可以分散负载、提高性能,还可以最大限度地减少潜在的停机时间。这就是为什么过去即使是像 Twitter 这样的大型社交网络也使用 Memcached 的原因。

但现在他们还实施了另一个缓存系统。

Redis

Redis最初于 2009 年发布,与 Memcached 类似,都是开源的,并且受到大多数网络托管服务提供商的支持。与 Memcached 一样,它将数据存储在服务器的 RAM 中,以便更快地传输数据。

与市场竞争对手不同,Redis 写入内存的数据是持久的——快照文件和日志在启动时恢复信息。这与它的键值数据检索系统相结合,意味着 Redis 可以用作功能齐全的非关系数据库管理系统

如果您使用 SQL 数据库,Redis 可以作为缓存解决方案实现。它提供对数据类型的支持,这是 Memcached 所缺乏的,而且 Redis 支持的语言和应用程序范围更加令人印象深刻。

总体而言,Redis 的多项功能比 Memcached 更强大、更灵活。不过,这两种解决方案都可以显著加快数据库速度,因此考虑使用它们是一个不错的选择。

磁盘 I/O 优化

几乎所有优化技术最终都是为了减少磁盘需要执行的读写操作的次数(磁盘 I/O)

由于索引的存在,DBMS 不需要在每次需要数据时扫描整个表,并且借助缓冲,许多查询由服务器的随机存取存储器而不是速度慢得多的磁盘来处理。

但是,如果数据库的大小增长到一定程度,数据量就会变得太大,搜索也会变得过于随机,上面的优化方法就无法发挥作用了。尽管你尽了最大努力,磁盘 I/O 仍会上升。

不幸的是,处理这个问题并不像你想象的那么容易。部分原因是诊断问题需要一些技术知识,部分原因是不同的 DBMS 和存储引擎的操作方式不同,可能会影响 I/O。

目前还没有普遍支持的解决方案可以减少磁盘上的输入和输出操作数量。但是,在大多数情况下,有一些技术应该可以奏效:

优化表和索引

我们将从降低磁盘开销的最基本方法开始。一个活跃的数据库必须处理数千个插入、修改和删除表中存储的信息的请求。这些请求越多,数据就越混乱。

大多数 DBMS 都具有内置机制,可自动重新排列信息以加快扫描速度并更快地提供正确的记录。例如,对于MariaDB 和 MySQL来说,它是通过 OPTIMIZE TABLE 语句运行的。对于PostgreSQL 来说,它是 VACUUM。

建议定期使用这些实用程序作为数据库定期维护的一部分。如果您不习惯使用命令行,phpMyAdmin 等工具可以通过图形界面提供该功能。

改善你的索引

只有正确配置索引,索引才能提升数据库的性能。索引大型数据库时,必须格外小心。如果索引中包含经常更新的列,则 DBMS 需要在磁盘上执行更多写入操作。如果您的数据库包含数千(甚至数十万)行,则

尤其如此。

因此,随着数据库的增长,请务必监控其性能。如果数据库速度变慢,请检查索引,看看是否有任何经常修改的数据被编入索引。如果是,最好禁用一些索引,看看这是否会影响速度。

分区

分区是指将大型数据库表拆分成更小、更易于管理的部分。各个分区可以托管在不同的文件系统上,这意味着负载分布更均匀,并且有更多资源可用来保证快速加载速度。此外,将庞大的表分解成更小的块使 DBMS 能够更快地找到所需信息并提高数据库的整体性能

设置正确的检查点

检查点会告知 DBMS 从内存中复制任何已修改的数据并将其永久保存在服务器的 HDD 或 SSD上。定期检查点可确保您对数据库所做的修改得到保存,并且不会丢失任何数据。

但是,每个检查点都不可避免地会在磁盘上产生活动。有一些方法可以缓和这种活动。

您可以在站点不太繁忙的时段设置检查点,以避免不必要的 I/O 峰值。此外,检查点具有超时功能,如果写入操作耗时过长,则会中止该操作。这可以在高负载期间减轻服务器主存储设备的一些压力。

数据库架构设计

架构定义了数据库中的关键元素(表、行、列、索引和数据条目)及其之间的关系。如果将数据库比作一台机器,架构就是向服务器展示各个组件如何组装以及它们如何工作的蓝图。

毋庸置疑,如果模式设计不当,数据库管理员和软件应用程序都会很难理解。最重要的是,它会使数据检索更加棘手,并减慢查询执行时间。因此,模式的设计至关重要。 

但你怎样才能选择正确的一个呢?

首先,从实体关系图 (ERD)开始。ERD 是一种流程图,向您展示系统中元素之间的相互关系。在我们的上下文中,元素是表、列、行和条目,系统是数据库。从
技术上讲,它不是数据库的一部分。它是数据库管理员用来确定如何组织数据的可视化表示。下面,您可以看到典型 WordPress 数据库的 ERD。

VPS主机上的数据库性能优化方法

当您开始绘制 ERD时,您会发现数十种适用于不同类型数据库的模型。

例如,层次模型是一种树状结构,各个条目之间具有明确的父子关系。如果数据条目具有一对多关系,则此模型适合您。

网络模型引入了集合的概念。它不拘泥于严格的父子结构,如果您的数据组织基于多对多关系,则非常适合。缺点是网络模型的实现和维护比较棘手。

ERD 和模式的模型选择取决于许多因素,其中包括:

  • 数据库中存储的数据量
  • 在任何给定时间查询的数据量
  • 数据修改的频率
  • 您需要处理和存储的数据类型
  • 您自己设定的性能基准
  • 您想要拥有的可扩展性选项

选择模型并明确架构设计后,就该创建它了。有多种方法可以设置新架构。传统主义者更喜欢在 SQL 文件中编写所需的语句,将其上传到服务器,然后通过命令行运行它。
对于那些寻找更适合新手的选项的人来说,通过MySQL Workbench之类的工具进行操作可能是更好的选择。建立与数据库服务器的连接后,您将在主工具栏中看到按钮。

优化托管 VPS 主机上的数据库性能,数据库架构设计 2

系统会要求您输入新架构的名称以及默认字符集和排序规则。单击“应用”后,MySQL Workbench 将打开 SQL 编辑器,您可以在其中输入所需的语句。

优化托管 VPS 主机上的数据库性能,数据库架构设计 3

在设计数据库时,您应该关注几个可以提高速度和简化管理的事项。以下是其中一些:

  • 易于理解的命名约定 –这里有几条经验法则需要遵循。命名表和列时,请使用完整单词而不是缩写,并用下划线分隔它们。尽可能缩短表和列名称,如果您不想出现语法错误,请确保不要使用保留字。
  • 使用正确的数据类型 –关系数据库可以存储各种信息。但是,如果希望它尽可能高效,则必须为每个表和保存的每条记录设置正确的数据类型。例如,存储用户出生日期的列需要使用DATE 类型。如果该列保留用户创建帐户的确切日期和时间,则必须使用DATETIME 类型。

如果您没有设置正确的数据类型,您的数据库将使用太多的磁盘空间,并且查询执行将相对较慢。

  • 坚持规范化最佳实践——规范化是一种数据库设计原则,可消除数据冗余、简化数据库结构并大幅缩短查询执行时间。有不少于七种不同的规范化形式可以帮助您实现这一点。它们很少同时使用,但研究所有这些形式是值得的。

扩展数据库资源

扩展意味着向您的托管基础​​设施添加更多硬件资源以加快您的网站速度。 

额外的内存、处理能力和存储确实可以消除相当多的瓶颈,但升级您的帐户不应该是您的首选。事实上,在您诉诸它之前,您必须确保您拥有一个完全优化的数据库,并且已经实施了所有提高速度的技术。不这样做可能会对您的项目产生不止一种影响,而是两种影响。

首先,这是一个是否需要硬件升级的问题。优化的数据库可以在功能较弱的硬件上表现良好并执行更多查询,而组织不良的数据库则运行在顶级机器上。此外,随着数据库越来越大,任何优化的缺乏都会变得更加明显,即使扩大资源也不足以保证快速的加载速度。

其次,最有效的扩展技术通常会使数据库设置更加复杂,维护起来也更加棘手。除非真的需要,否则你不会想处理额外的复杂性。

因此,扩展并不是一条捷径,可以免除改进数据库设计和操作的需要。然而,它通常是确保查询快速高效执行的最佳方法。

数据库扩展有两种类型:垂直和水平。让我们更详细地探讨一下这些概念。

  • 垂直数据库扩展 -垂直扩展基本上意味着升级服务器的硬件。如何实现这一点取决于您使用的托管服务类型。如果您使用的是专用服务器,则必须关闭机器并更换物理组件,或者将整个网站迁移到更强大的服务器。如果您使用云 VPS,则无需这样做。得益于虚拟化,您的虚拟服务器具有无限的可扩展性。您只需单击几下即可添加更多CPU 内核、升级 RAM或扩展存储容量。升级几乎不需要做任何事情,只需快速重启即可,因此不会对您的正常运行时间统计数据造成太大影响。
  • 水平数据库扩展 –水平数据库扩展也称为分片,主要用于包含数千行表的大型数据库。它涉及将大型表拆分为两个或多个较小的表并将它们存储在单独的节点上。这些节点可以是单独的机器,也可以是Docker 容器的虚拟实例。

但这样做会对数据库性能产生什么影响?

首先,当DBMS 需要查找特定记录时,它不会浏览包含成千上万行和列的庞大表格,而是会扫描一小部分信息。这减少了服务器的负载,有助于提高加载速度。磁盘 I/O 也会减少,因此数据传输速度会更快。

数据可用性也得到了改善。如果其中一个节点出现故障,用户仍然可以访问存储在分片表中不受影响的部分中的信息。

但是如何将一张桌子分成两张呢?

再次,有两种方法——水平和垂直

为了说明差异,我们将使用一个有四行五列的简单表格。它包含注册用户的详细信息,如下所示:

ID出生日期出生地
001约翰威廉姆斯1990 年 9 月 25 日纽约
002史密斯1989年4月30日圣地亚哥
003威廉琼斯1994 年 6 月 5 日达拉斯
004山姆车工1992 年 3 月 4 日波士顿

水平分割页面的字面意思是在页面上画一条水平线。我们最终得到两个如下所示的表格:

ID出生日期出生地
001约翰威廉姆斯1990 年 9 月 25 日纽约
002史密斯1989年4月30日圣地亚哥

和这个:

ID出生日期出生地
003威廉琼斯1994 年 6 月 5 日达拉斯
004山姆车工1992 年 3 月 4 日波士顿

这两个表可以位于不同的节点上。您可能已经猜到了垂直拆分背后的逻辑。我们将列拆分为两个表,并将它们放置在不同的服务器上。但是,由于我们需要将一个表中的数据与另一个表中的数据关联起来,因此我们需要使用ID 列作为标识符

结果是:

ID
001约翰威廉姆斯
002史密斯
003威廉琼斯
004山姆车工

和:

ID出生日期出生地
0011990 年 9 月 25 日纽约
0021989年4月30日圣地亚哥
0031994 年 6 月 5 日达拉斯
0041992 年 3 月 4 日波士顿

这个想法是,DBMS 需要扫描的记录要少得多,而且它可以更快地找到所需的信息。

结论

加快数据库速度的任务听起来很艰巨,而且正如您从我们上面的详尽报告中看到的,这个过程有时可能非常复杂。太多因素会影响性能,而解决所有问题对于单个网站所有者来说可能是一项挑战。

好消息是,如果您使用VPS服务,您可以依靠专家为您考虑这些因素。DBMS是您开箱即用的堆栈的一部分,它通常配置为与最流行的应用程序配合使用并发挥最佳性能。

但这并不意味着你不应该知道它是如何工作的,或者你可以做些什么来提高它的速度。上面的深入报告应该会给你提供你需要的所有信息。

常问问题

问: 如何检查我的 VPS 的性能?

答:如果您的服务器性能不达标,您在浏览网页时可能会注意到这一点。话虽如此,最好还是依靠众多在线网页速度测试工具之一。定期使用这些工具,您可以为网站的速度设定一个基准。当它偏离该基准时,您将能够在用户察觉之前发现差异。

问: 你们如何优化数据库性能?

答:更多地了解数据库的工作原理将有助于您了解需要做些什么来提高数据库的速度。这将帮助您了解如何实施索引和缓存等技术,并向您展示它们如何帮助提高性能

问: 优化数据库性能的目标是什么?

答:浏览典型网站时,您在屏幕上看到的很多内容都存储在数据库中。这些数据传递得越快,您的页面加载速度就越快。页面加载速度越快,用户体验就越好—— 这对于每个在线项目来说都至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/373192.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

效果惊人!LivePortrait开源数字人技术,让静态照片生动起来

不得了了,快手已经不是众人所知的那个短视频娱乐平台了。 可灵AI视频的风口尚未过去,又推出了LivePortrait--开源的数字人项目。LivePortrait让你的照片动起来,合成逼真的动态人像视频,阿里通义EMO不再是唯一选择。 让图像动起来 LivePortrait 主要提供了对眼睛和嘴唇动作的…

实体构件库设计说明方案

实体构件库设计说明方案 一、引言 在数字化设计与制造日益普及的今天,实体构件库作为连接设计创意与物理实现的关键桥梁,其重要性不言而喻。实体构件库不仅存储了各类标准化、参数化的零部件模型,还提供了便捷的检索、配置、优化及自动化生…

昇思MindSpore学习总结十二 —— ShuffleNet图像分类

当前案例不支持在GPU设备上静态图模式运行,其他模式运行皆支持。 1、ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一样主要应用在移动端,所以模型的设计目标就是利用有限的计算资源来达…

信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(含离线部署新方式)

本文将详细介绍,如何基于鲲鹏CPU(arm64)和操作系统 Kylin V10 SP2/SP3,利用 KubeKey 制作 KubeSphere 和 Kubernetes 离线安装包,并实战部署 KubeSphere 3.3.1 和 Kubernetes 1.22.12 集群。 服务器配置 主机名IPCPUOS用途master-1192.168.10…

变长输入神经网络设计

我对使用 PyTorch 可以轻松构建动态神经网络的想法很感兴趣,因此我决定尝试一下。 我脑海中的应用程序具有可变数量的相同类型的输入。对于可变数量的输入,已经使用了循环或递归神经网络。但是,这些结构在给定行的输入之间施加了一些顺序或层…

7.9实验室总结 SceneBuilder的使用方法+使用javafx等

由于下错了东西,所以一直运行不出来,今天一直在配置环境,配置好了才学,所以没学多少,看了网课学习了SceneBuilder的使用方法还有了解了javafx是怎么写项目的,, 学习了怎么跳转页面:…

html H5 dialog弹窗学习,实现弹窗显示内容 替代confirm、alert

html H5 dialog弹窗学习,实现弹窗内容 替代confirm 框架使用的mui,使用mui.confirm() 弹窗内容过多时,弹窗被撑的到屏幕外去了,使用H5 dialog 标签自定义一个固定大小的弹窗,内容过多时可下拉显示 效果展示 隐私政策内容很多,可以下拉显示 代码 myDialog.css dialog{p…

【光伏仿真系统】光伏设计的基本步骤

随着全球对可再生能源需求的不断增长,光伏发电作为一种清洁、可再生的能源形式,正日益受到重视。光伏设计是确保光伏系统高效、安全、经济运行的关键环节,它涉及从选址评估到系统安装与维护的全过程。本文将详细介绍光伏设计的基本步骤&#…

【RHCE】转发服务器实验

1.在本地主机上操作 2.在客户端操作设置主机的IP地址为dns 3.测试,客户机是否能ping通

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容 本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程,因涉及到非结构化数据的相关处理,遂做学习整理。 本节主要学习pdf中的表格数据处理 2.环境准备 和之前一样,可以参考LLM应用构建前…

Raylib 实现超大地图放大缩小与两种模式瓦片地图刷新

原理: 一种刷新模式: 在宫格内整体刷新,类似九宫格移动到边缘,则九宫格整体平移一个宫格,不过这里是移动一个瓦片像素,实际上就是全屏刷新,这个上限是 笔记本 3060 70帧 100*100个瓦片每帧都…

压缩感知3——重构算法正交匹配追踪算法

算法流程 问题的实质是&#xff1a;AX Y 求解&#xff08;A是M维&#xff0c;Y是N维且N>>M并且稀疏度K<M&#xff09;明显X有无穷多解&#xff0c;重构过程是M次采样得到的采样值升维的过程。OMP算法的具体步骤&#xff1a;(1)用X表示信号&#xff0c;初始化残差e0 …

802.11漫游流程简单解析与笔记_Part2_05_wpa_supplicant如何通过nl80211控制内核开始关联

最近在进行和802.11漫游有关的工作&#xff0c;需要对wpa_supplicant认证流程和漫游过程有更多的了解&#xff0c;所以通过阅读论文等方式&#xff0c;记录整理漫游相关知识。Part1将记录802.11漫游的基本流程、802.11R的基本流程、与认证和漫游都有关的三层秘钥基础。Part1将包…

C#用反射机制调用dll文件的字段、属性和方法

1、创建dll文件 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace CLStudent {public class Student{//字段public string Name "Tom";//属性public double ChineseScore { get; s…

connect to github中personal access token生成token方法

一、问题 执行git push时弹出以下提示框 二、解决方法 去github官网生成Token&#xff0c;步骤如下 选择要授予此 令牌token 的 范围 或 权限 要使用 token 从命令行访问仓库&#xff0c;请选择 repo 。 要使用 token 从命令行删除仓库&#xff0c;请选择 delete_repo 其他根…

下载Windows版本的pycharm

Python环境搭建 第一步下载安装python 等待安装完成 验证python是否安装成功 Python开发工具安装部署 JetBrains: Essential tools for software developers and teams PyCharm: the Python IDE for data science and web development 下载社区版本的PyCharm 双击打开下载好的…

C++20中的基于范围的for循环(range-based for loop)

C11中引入了对基于范围的for循环(range-based for loop)的支持&#xff1a;该循环对一系列值(例如容器中的所有元素)进行操作。代码段如下&#xff1a; const std::vector<int> vec{ 1,2,3,4,5 }; for (const auto& i : vec)std::cout << i << ", …

Github Actions 构建Vue3 + Vite项目

本篇文章以自己创建的项目为例&#xff0c;用Github Actions构建。 Github地址&#xff1a;https://github.com/ling08140814/myCarousel 访问地址&#xff1a;https://ling08140814.github.io/myCarousel/ 具体步骤&#xff1a; 1、创建一个Vue3的项目&#xff0c;并完成代…

书生大模型实战营(暑假场)-入门岛-第一关

书生大模型实战营暑假场重磅开启&#xff01;&#xff0c;这场学习路线看起来很好玩呀&#xff0c;闯关学习既能学到知识又有免费算力可得&#xff0c;太良心啦。感兴趣的小伙伴赶快一起报名学习吧&#xff01;&#xff01;&#xff01; 关卡任务 好的&#xff0c;我们废话不多…

CentOS6用文件配置IP模板

CentOS6用文件配置IP模板 到 CentOS6.9 , 默认还不能用 systemctl , 能用 service chkconfig sshd on 对应 systemctl enable sshd 启用,开机启动该服务 ### chkconfig sshd on 对应 systemctl enable sshd 启用,开机启动该服务 sudo chkconfig sshd onservice sshd start …