我已经看到一些专用的 MySQL 服务器,它们只使用一个内核。我比 MySQL 的 DBA 更擅长开发,所以需要一些帮助
服务器非常庞大,具有 OLAP/DataWarehouse (DW) 类型的负载:
注意:最大的 DB 是从 OLTP DR 服务器复制的 DB,DW 就是从这里加载的。它不是完整的 DW:仅持续 6 个月到 6 周,因此它比 OLTP DB 小。
ALTER TABLE...DROP KEY...ADD INDEX概念性问题:单个查询是否比连接更快,或者:我应该尝试将客户端所需的所有信息都压缩到一个SELECT 语句中,还是只使用看起来方便的尽可能多的信息?
TL;DR:如果我的联合查询比运行单个查询花费的时间更长,这是我的错还是可以预料的?
首先,我不是很精通数据库,所以可能只是我,但我注意到当我必须从多个表中获取信息时,通过对单个表的多个查询来获取这些信息“通常”更快(也许包含一个简单的内部连接)并在客户端将数据拼凑在一起,以尝试编写一个(复杂的)连接查询,我可以在一个查询中获取所有数据。
我试图把一个非常简单的例子放在一起:
架构设置:
CREATE TABLE MASTER
( ID INT NOT NULL
, NAME VARCHAR2(42 CHAR) NOT NULL
, CONSTRAINT PK_MASTER PRIMARY KEY (ID)
);
CREATE TABLE DATA
( ID INT NOT NULL
, MASTER_ID INT NOT NULL
, VALUE NUMBER
, CONSTRAINT PK_DATA PRIMARY KEY (ID)
, CONSTRAINT FK_DATA_MASTER FOREIGN KEY (MASTER_ID) REFERENCES MASTER (ID)
);
INSERT INTO MASTER values (1, 'One');
INSERT INTO MASTER values (2, 'Two');
INSERT …Run Code Online (Sandbox Code Playgroud) 我从一个示例配置文件中读取了以下内容:
# Sort buffer is used to perform sorts for some ORDER BY and GROUP BY
# queries. If sorted data does not fit into the sort buffer, a disk
# based merge sort is used instead - See the "Sort_merge_passes"
# status variable. Allocated per thread if sort is needed.
Run Code Online (Sandbox Code Playgroud)
我有几个使用文件排序的查询。如何确定查询在不碰到磁盘的情况下顺利运行所需的缓冲区大小是多少?
我刚刚通过 DTA 运行了一个 T-SQL 查询,其中一项建议是在作为 SQL 代码文件中许多查询的一部分的列之一上创建统计信息。
我的问题是,统计数据究竟如何帮助提高性能?
我发现自己在工作中编写了越来越多的 SQL 查询(主要是 Oracle 11g,但也有一些是 SQL Server 2005-2008),并且已经开始为分析师团队的其他成员创建一些非常复杂的视图。
他们大多都运行得很好,但其中一些不太好。所以...
和...
我们这里有一些优秀的 DBA,但他们太忙了,无法帮助我们调整我们编写的每个查询。
我在 Amazon 上为 Oracle 找到的大多数书籍似乎都面向整体数据库优化和/或写于 8-10 年前。
非常感谢您的建议:)
innodb_read_io_threads和的默认值为innodb_write_io_threads4。如何检查您的服务器负载是否需要更高数量的线程?
正如我定期检查的那样show engine innodb status \G,没有可追踪的活动:
--------
FILE I/O
--------
I/O thread 0 state: waiting for completed aio requests (insert buffer thread)
I/O thread 1 state: waiting for completed aio requests (log thread)
I/O thread 2 state: waiting for completed aio requests (read thread)
...
I/O thread 32 state: waiting for completed aio requests (write thread)
I/O thread 33 state: waiting for completed aio requests (write thread)
Pending normal aio reads: [0, 0, 0, 0, …Run Code Online (Sandbox Code Playgroud) 特别是双 CPU 32 核 - 128RAM - RAID 10 SSD。Ubuntu 64 服务器。
有时 Innodb 负载很重 - 每秒约 2000 多个查询。重读和写。
目前我们在默认的 write_io_threads 上运行 4。
我们是否“削弱”了我们服务器的能力?在 max write_io_threads=64 和 read_io_threads = 64 上运行它是否安全?
这个数字是如何确定的?
我正在运行以下查询的执行计划:
select m_uid from EmpTaxAudit
where clientid = 91682
and empuid = 42100176452603
and newvalue in('Deleted','DB-Deleted','Added')
Run Code Online (Sandbox Code Playgroud)
下面是执行计划:
我在 ClientId 和 NewValue 列上的 EmpTaxAudit 表上有一个非聚集索引,上面显示为执行的 14.9%:
CREATE NONCLUSTERED INDEX [idx_EmpTaxAudit_clientid_newvalue] ON [dbo].
[EmpTaxAudit]
(
[ClientID] ASC,
[NewValue] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
Run Code Online (Sandbox Code Playgroud)
我还有一个非聚集唯一索引 PK,如下所示:
ALTER TABLE [dbo].[EmpTaxAudit] ADD CONSTRAINT [PK_EmpTaxAudit] PRIMARY KEY NONCLUSTERED
(
[ClientID] ASC,
[EmpUID] ASC,
[m_uid] ASC,
[m_eff_start_date] ASC,
[ReplacedOn] …Run Code Online (Sandbox Code Playgroud) 我正在使用压缩、写入多个文件以及更改BufferCount和MaxTransferSize选项来调整 SQL Server 备份。我有一个 SQL Server 实例,其中包含 4 TB 数据库和几个从几 MB 到 150 GB 的较小数据库。
我的问题是,我是否可以开始使用 150 GB 数据库进行调整,然后将这些设置应用到 4 TB 备份,只需进行最小的更改,或者 4 TB 是否需要从头开始拥有自己的“调整会话”?由于通常需要多次备份尝试才能拨入设置,因此我尝试在可能的情况下快速开始调整 4 TB 数据库。
我在尝试调整以下查询时遇到了麻烦。我曾经 100% 专注于基础设施方面,但自今年 8 月以来,我在一家处理卡公司工作,该公司只要求我的“阴暗面”——查询调整技能。
如果您能为我提供提高查询性能的建议和技巧,我将不胜感激。以下是表格:
CREATE TABLE [dbo].[Delivery](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Address_Name] [varchar](120) NULL,
[Address_Street] [varchar](120) NULL,
[Address_Complement] [varchar](120) NULL,
[Address_City] [varchar](120) NULL,
[Address_District] [varchar](120) NULL,
[Address_Number] [varchar](120) NULL,
[Address_State] [varchar](120) NULL,
[Address_ZipCode] [varchar](120) NULL,
[OsFk] [int] NOT NULL,
[WebstoreOrderId] [int] NOT NULL,
[CourierType] [int] NULL,
CONSTRAINT [PK_Delivery] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE …Run Code Online (Sandbox Code Playgroud) tuning ×10
mysql ×4
performance ×4
sql-server ×4
innodb ×3
mariadb ×2
mysql-5.5 ×2
backup ×1
join ×1
myisam ×1
sorting ×1
statistics ×1
t-sql ×1