在nas上mysql的性能非常慢

kuarbcqp  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(639)

刚给自己买了一个asustor nas来处理我的视频、图片、音乐等。家里有一个台式机和一个笔记本,我想在nas上设置我的数据库是个好主意(已经预装了mariadb)。
设置:raid1,磁盘最大读取速度约110mb/s,通过1.3mbps的wifi连接,千兆连接。使用blackmagic基准测试获得大约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;

table orders 表中有大约180万行 items 大约有4700行。查询影响5k行,运行时间在4.8到7.0秒之间,对于这样一个简单的查询来说,这似乎很荒谬。我曾经在本地主机上运行相同的查询(好的,这是一个nvmesd,我得到的要快得多),以毫秒为单位。 order_id 是一个包含大约10个字符的varchar。
在所有表中插入所有数据大约需要7(上次是9)分钟:

`orders` - 1.7k rows, 11 columns
`items` - 4.8k rows, 12 columns
`customers` - 1.7k rows, 9 columns

我的问题是:
这真的是一个糟糕的性能,还是我得到了错误的性能基准后,使用了NVMESSD的?
如果它确实不好,我可以做些什么来改进它(仍然在我的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;`
w8rqjzmb

w8rqjzmb1#

这真的是一个糟糕的性能,还是我得到了错误的性能基准后,使用了NVMESSD的?
是的,这是一种糟糕的表现。正确的查询索引将在一定程度上解决查询的性能问题。要让nas使用innodb\u buffer\u pool和空闲内存作为磁盘缓存将非常困难,因为只有512m在板上。
如果它确实不好,我可以做些什么来改进它(仍然在我的nas上托管我的db)?
使用联接和顺序来更正表的索引。设计更改为对联接使用整数主键。作为第一步,如果 order_id 实际上不是utf8,只是拉丁文1对该列进行了更改,这样可以使键变小,也可以将其更改为主键。
由于这是一个完整的查询中的两个表的数据搜索,它只能消除io延迟,如果它都可以留在ram。
在联机托管数据库上,我能期望什么样的性能?
托管数据库将提供更多的ram,可能还有更快的cpu。

相关问题