NAS上MySQL的性能非常慢

NAS上MySQL的性能非常慢,mysql,mariadb,nas,Mysql,Mariadb,Nas,我刚买了一台Asustor NAS来处理我的视频、图片、音乐等。 家里有一台台式机和一台笔记本电脑,我想在预装了MariaDB的NAS上设置我的数据库是个好主意 设置:RAID 1,磁盘的最大读取速度约为110MB/s,通过1.3Mbps的WiFi连接,并具有千兆连接。使用BlackMagic Benchmark可获得约60MB/s的速度 查询: SELECT items.title, items.discount, items.qtd, items.price, ((price *

我刚买了一台Asustor NAS来处理我的视频、图片、音乐等。 家里有一台台式机和一台笔记本电脑,我想在预装了MariaDB的NAS上设置我的数据库是个好主意


设置:RAID 1,磁盘的最大读取速度约为110MB/s,通过1.3Mbps的WiFi连接,并具有千兆连接。使用BlackMagic Benchmark可获得约60MB/s的速度

查询:

    SELECT items.title, items.discount, items.qtd, items.price,  ((price * qtd) - discount) AS total, DATE_FORMAT(orders.created_at, '%m-%y')
    FROM items
    INNER JOIN orders ON orders.order_id = items.order_id
    ORDER BY created_at;
表orders大约有1.8k行,表项大约有4.7k行。该查询影响5k行,运行时间在4.8到7.0秒之间,对于这样一个简单的查询来说,这似乎是荒谬的。我曾经在本地主机上运行过相同的查询,这是一个NVMe SSD,我得到的速度要快得多,以毫秒为单位。order_id是一个VARCHAR,其中包含大约10个字符

最后一次插入所有表中的所有数据大约花费了79分钟:

`orders` - 1.7k rows, 11 columns
`items` - 4.8k rows, 12 columns
`customers` - 1.7k rows, 9 columns
我的问题:

是真的有那么糟糕的性能,还是我在使用NVMe SSD后得到了错误的性能基准? 如果它确实不好,我可以做些什么来改进它,仍然在我的NAS上托管我的DB? 对于在线托管数据库,我能期望什么样的性能? 非常感谢

**Tables:**
`CREATE TABLE `orders` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `order_id` varchar(15) DEFAULT NULL COMMENT 'VA',
  `created_at` datetime DEFAULT NULL,
  `gateway` varchar(25) DEFAULT NULL,
  `total` decimal(15,0) DEFAULT NULL,
  `subtotal` decimal(15,0) DEFAULT NULL,
  `status` varchar(20) DEFAULT NULL,
  `discounts` decimal(15,0) DEFAULT NULL,
  `total_price` decimal(15,0) DEFAULT NULL,
  `order_number` varchar(15) DEFAULT NULL,
  `processing` varchar(15) DEFAULT NULL,
  `customer_id` varchar(15) DEFAULT NULL,
  `number` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `number` (`number`),
  UNIQUE KEY `order_id` (`order_id`),
  KEY `customer_id` (`customer_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1712 DEFAULT CHARSET=utf8;`
是真的有那么糟糕的性能,还是我在使用NVMe SSD后得到了错误的性能基准? 是的,这是一种糟糕的表现。查询的正确索引将在一定程度上解决查询的性能问题。要让NAS使用innodb_buffer_pool并将内存释放为磁盘缓存将非常困难,因为只有512M在板上

如果它确实不好,我可以做些什么来改进它,仍然在我的NAS上托管我的DB? 使用联接和顺序帮助更正表的索引。设计更改为使用整数主键进行联接。作为第一步,如果order_id实际上不是utf8,只是该列的拉丁文1更改,这会使键变小,那么也可以将其更改为主键

由于在查询中这是一个完整的两个表数据搜索,因此只有当IO延迟全部留在RAM中时,它才能消除IO延迟

对于在线托管数据库,我能期望什么样的性能?
托管数据库将提供更多的RAM,可能还有更快的CPU。

请为表显示创建表{tablename},并解释{query}。也可能是您的MariaDB没有得到最佳配置。NAS有多少备用ram?安装了哪个版本的MariaDB选择版本?MariaDB上显示的全球状态是什么?如果您经常导入/更新,则可能需要增加innodb_日志_文件的大小。1.3 Mbps WiFi和千兆连接?千兆位是有线连接吗?连接是:从ISP调制解调器输入internet到路由器Archer C7,并将NAS插入路由器RJ45端口。该路由器有一个千兆连接路由器x NAS,在5Ghz频段上有1.3Mbps。。。我通过WiFi在桌面上连接,但考虑到路由器/电缆不应该成为瓶颈,我期待着更多。。。。NAS是Asustor AS1002T,我猜它有512个RAM,在使用DB时,CPU占5%左右,内存占45%…无法发布创建表,因为它太长了,但基本上每个表有12列,1个PK,2个UK,2个KK,8个VARCHAR 255,4个小数25-它们的格式都很相似。解释查询:简单选择类型,所有类型用于联机,参考用于其他,关键字=48,1710行,额外:使用Where;使用文件排序。10.0.28马里亚布。。。不知道在节目中查找什么全局状态显示全局状态,如“innodb%”;查找已使用/未使用的缓冲池页等。查看是否可以在不显示全局状态的情况下放置解释信息/显示创建表。All/Using where/filesort表示您的索引不正确。非常感谢,我将检查我的缓冲池,看看我能做些什么来优化结构。我仍然觉得很奇怪,即使我从say VARCHAR 255改为VARCHAR 50,Sequel Pro也需要一些时间来处理它。。。我会继续挖。干杯