搜尋
首頁資料庫mysql教程 【自爆系列】浅谈我对数据库性能注意事项的错误了解

对与数据库的性能,有很多注意事项 入行这些年,以为积累了这些就够了,也以为这些是对的,其实多为表面现象,似似而非 1:不要用select *,因为这影响性能,但是人懒,没办法,用了那么多select *,也没见死机不是 2:where 后面的东西要走索引,所以经常玩

对与数据库的性能,有很多注意事项

入行这些年,以为积累了这些就够了,也以为这些是对的,其实多为表面现象,似似而非

1:不要用select *,因为这影响性能,但是人懒,没办法,用了那么多select *,也没见死机不是

2:where 后面的东西要走索引,所以经常玩命的建立索引,反复的看查询分析器,到底走索引了没,单纯为了走索引而走索引,以至于出现

nG数据2nG的索引

3:小子加with(nolock)了没,服务器死锁了!没加赶快加,但是难免犯懒,这个东西加没加也缺乏有效的检测,经常这个人忘了加,哪个人忘了加我怎么知道,哎说多了都是泪

4:sql服务器主要的性能指标为CPU,和链接数,直到后来,才知道这些只是表现,sql服务器的主要指标是io,其次是cpu和连接数

5:为了提高性能,写一个老复杂老长的sql,后来才知道,这个老复杂老长的sql表面上性能高了,实际上反而降低了,尤其是并发来的时候的时候

6:项目的开始,必然是以一个数据库开始了,里面放了所有需要的表。。。。。。

直到有一次打电话给运维dba

                                                     问,我们要提高数据库稳定性改咋整?

                                                     运维回复:你要做读写分离还是要做主从还是要做啥呢,啪啦啪啦啪啦啪啦啪啦啪啦啪啦,

                                                     最后根据你们服务器io的表现,建议啥也别做自己优化程序吧,当时就想吧第一个创建数据库的人,第一个创建表的人(虽然已经离职N年了)拉出来,问:你当初建表的时候咋就不考虑这些呢?

从运维的角度,提高数据库稳定性的基本手段只能是读写分离(确保写入数据没问题,保持数据流畅通,不掉链子),一主多从或多主多从

参考 这篇文章,

主从库之间是一种发布订阅的关系,发布者和订阅者之间并非实时同步的,通常会有几分钟的延时,更有甚者会有几个小时的延时。所以我们需要通过合理的使用来避开有延时这个问题。我们希望主库尽可能的少参与查询,来提高写的及时性;同时要让从库在不影响读出数据的准确及时的前提下尽可能的分担主库的压力

(PS:运维还说,做了主从或什么的,必须是整个数据库进行同步,而不是某几个表,同时,整个数据库表的结构的修改,新增或删除表有可能导致意外风险时同步失败等等啪啦啪啦啪啦啪啦)

从一个数据库变成多个一摸一样的数据库,是解决数据库稳定性

随之产生的问题就是延迟!!!!!!!!!!!!!!!!!!!!!

首先本人声明,本人还没做过基于mssql主从数据库上的程序,新浪sae的APP由于读写分离延迟太小忽略不计了,而且是mysql的

根据项目老大和运维dba的分析影响主从时候延迟的因素主要有

1:你这个主库写入的数据的速度快不快啊,如果快了,那就得把写的快的表和字段拆出去

2:你这个主库修改的速度快不快啊,如果快了,那就得把修改快的字段拆出去

3:你这个主库整体写入和修改的速度快不快啊,如果快了,那就得一分为二

4:你的这个查询啊,那些有group 等的都在那些表上,该拎出来的就拎出来

5:至于宽带、硬盘读写性能、cpu等我们都是无力改变的,就当做不知道吧

6:你们看着办吧

总而言之,言而总之,,以前我对sql的性能总停留在 索引上和select * 上,这其实是不科学的表面现象,至少走没走索引你监控不了那个查询造成ip或cpu高了

sql服务器可以监控的指标

1:io 是否满载,是否出现sina(x) 那样的波浪线,频繁的满载

     ps:很多情况下,io频繁满载,例如周五,各个单位做数据汇总交差,管理员后来查询统计拉挂数据库服务器,进而拉挂前台展示站点。。。。

2:cpu是否满载,是否出现sina(x) 那样的波浪线,频繁的满载

    cpu:说实话你有没有在sql里面写死循环,没写死循环cpu应该没事

3:连接数是否满载,是否出现sina(x) 那样的波浪线,频繁的满载

   赶紧看看流量涨了没,是涨了多少,是以前的一倍还是2倍还是多少,如果少于3倍,问题必然出在1和2上

这3个要素也是运维或dba决定怎么搞数据库的主要指标,

话说基于主从结构的数据库改如何设计呢?

其实我也没设计过,最近我在折腾我自己的抓取站点,才第一次自己操刀给数据库分表,坑多路少。。。

根据运维和dba的意见(核心思想)----不管你做什么我们一年只给年干几次这样的操作!也就是主从设置什么的1年只设置几次,因为同步失败呀什么的就不管了。

根据我入行3年的个人经验整理如下(ps:这些均不考虑需要带锁的场景,我还没用过锁呢。。。。。)

1:以慢慢写为主的主库,例如博客园存放博文的表放的库,不可能出现1分钟1入100条数据的表

2:以快快读为主的读库,禁止使用各种锁,禁止使用各种表联合查询,禁止使用group等高io操作

3:以慢慢读为主的低并发库,例如各种要求时时查询(分钟级别),各种统计,各种查询

4:以快快写为主的库,这个库只作灾备切换处理,例如点击量统计、系统日志等

最后根据经过验,实现以上4点,没有搜索聚合数据这个工具是不行,刚开始了解lucene,了解的不多,欢迎高手拍砖。

最后就是关于orm

因为dba说,这个设置了,就不能随便新增表和修改表的结构了

随便应该是1小时改一次,不随便,应该是1各月弄一次,

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL與Sqlite有何不同?MySQL與Sqlite有何不同?Apr 24, 2025 am 12:12 AM

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是什麼?它們如何提高性能?MySQL中的索引是什麼?它們如何提高性能?Apr 24, 2025 am 12:09 AM

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

說明如何使用MySQL中的交易來確保數據一致性。說明如何使用MySQL中的交易來確保數據一致性。Apr 24, 2025 am 12:09 AM

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。

在哪些情況下,您可以選擇PostgreSQL而不是MySQL?在哪些情況下,您可以選擇PostgreSQL而不是MySQL?Apr 24, 2025 am 12:07 AM

選擇PostgreSQL而非MySQL的場景包括:1)需要復雜查詢和高級SQL功能,2)要求嚴格的數據完整性和ACID遵從性,3)需要高級空間功能,4)處理大數據集時需要高性能。 PostgreSQL在這些方面表現出色,適合需要復雜數據處理和高數據完整性的項目。

如何保護MySQL數據庫?如何保護MySQL數據庫?Apr 24, 2025 am 12:04 AM

MySQL數據庫的安全可以通過以下措施實現:1.用戶權限管理:通過CREATEUSER和GRANT命令嚴格控制訪問權限。 2.加密傳輸:配置SSL/TLS確保數據傳輸安全。 3.數據庫備份和恢復:使用mysqldump或mysqlpump定期備份數據。 4.高級安全策略:使用防火牆限制訪問,並啟用審計日誌記錄操作。 5.性能優化與最佳實踐:通過索引和查詢優化以及定期維護兼顧安全和性能。

您可以使用哪些工具來監視MySQL性能?您可以使用哪些工具來監視MySQL性能?Apr 23, 2025 am 12:21 AM

如何有效監控MySQL性能?使用mysqladmin、SHOWGLOBALSTATUS、PerconaMonitoringandManagement(PMM)和MySQLEnterpriseMonitor等工具。 1.使用mysqladmin查看連接數。 2.用SHOWGLOBALSTATUS查看查詢數。 3.PMM提供詳細性能數據和圖形化界面。 4.MySQLEnterpriseMonitor提供豐富的監控功能和報警機制。

MySQL與SQL Server有何不同?MySQL與SQL Server有何不同?Apr 23, 2025 am 12:20 AM

MySQL和SQLServer的区别在于:1)MySQL是开源的,适用于Web和嵌入式系统,2)SQLServer是微软的商业产品,适用于企业级应用。两者在存储引擎、性能优化和应用场景上有显著差异,选择时需考虑项目规模和未来扩展性。

在哪些情況下,您可以選擇SQL Server而不是MySQL?在哪些情況下,您可以選擇SQL Server而不是MySQL?Apr 23, 2025 am 12:20 AM

在需要高可用性、高級安全性和良好集成性的企業級應用場景下,應選擇SQLServer而不是MySQL。 1)SQLServer提供企業級功能,如高可用性和高級安全性。 2)它與微軟生態系統如VisualStudio和PowerBI緊密集成。 3)SQLServer在性能優化方面表現出色,支持內存優化表和列存儲索引。

See all articles

熱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

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

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境