不是 PHP 不行了,而是 MySQL 資料庫扛不住啊

来源:https://www.cnblogs.com/yxhblogs/p/18355860
-Advertisement-
Play Games

大多數的業務場景下 PHP 還沒有達到性能瓶頸,然而 MySQL 資料庫就先行駕崩了。但我們總是不分青紅皂白,一股腦的把原因歸結於是 PHP 語言不行了,每當遇到這種情形我就會感嘆到 PHP 的命真苦啊。 ...


大家好,我是碼農先森。

大多數的業務場景下 PHP 還沒有達到性能瓶頸,然而 MySQL 資料庫就先行駕崩了。但我們總是不分青紅皂白,一股腦的把原因歸結於是 PHP 語言不行了,每當遇到這種情形我就會感嘆到 PHP 的命真苦啊。PHP 作為一門優秀的開源編程語言,在編程語言界一直享有「PHP是世界上最好的語言」的美譽,它讓 PHP 靚仔們養了家糊了口過上了小康生活,但一遇到點性能問題就被瘋狂的吐槽,它真是幹了件吃力不討好的活。當然我相信這種吐槽是少數的,絕大數的人都還是會秉承理性公正的眼光來看待 PHP 語言,在碰到問題時會仔細分析緣由,找到問題的癥結並解決它,讓 PHP 綻放屬於它自己的光芒。

還記得在之前的工作經歷中,使用 ThinkPHP 框架開發公司內部的 ERP 後臺系統,很多的情況都是資料庫拖慢了用戶的訪問速度,比如開發的一些財務數據報表,這些介面往往都會聚合了好幾張數據表的數據,左連接一張表右連接一張表,動不動還搞個全連接,這能不慢嘛。不僅如此,還有在一個介面里 SQL 語句的查詢都嵌套了好幾層,各種子查詢漫天飛,這樣的代碼現狀簡直慘不忍睹,數據量小的時候尚且能用不會影響用戶的體驗,當數據量上來時介面就經常搞超時,資料庫的慢日誌都打滿了。在我印象中有個最深刻的例子,就是有一個速賣通的產品編輯功能,一個頁面需要能同時編輯幾十個產品,這就是所謂的批量編輯,而且每個產品的詳情數據特別多,還包括很多的圖片,每次載入這些數據和圖片就半天了,這個功能使用人數最多、使用次數最頻繁,同時也是被吐槽的最多的。如果有開發過類似功能的朋友,可能會有比較深刻的感觸。

還有一種用腳本跑非同步任務的場景,由於有些報表用介面是真的搞不出來了,那就用腳本的方式定時計算。但當時由於我們的數據量比較大,都是上百萬千萬級別的,單進程跑數據太慢,為了提升效率就直接幹上了 PHP 多進程。那時我們還滿心歡喜的 Fork 著進程,一啟動腳本就是併發幾十個進程,結果現實情況就是給我們當頭一棒,阿裡雲 MySQL 資料庫監控系接連報警,登上雲控制台一看傻眼了,CPU 直接乾到 100% 滿載運行,搞的 ERP 後臺系統都無法正常訪問了。還被技術老大當頭呵斥你們搞什麼飛機,嚇得我們趕緊通過 Kill 命令把腳本進程強制殺掉。說到這裡可能有些朋友會有些疑惑了,為什麼非同步腳本會影響到 ERP 後臺系統呢?原因是大多數的 PHP 靚仔們都有直接線上上環境修改代碼的習慣,當然這種事情在我們這裡也不例外了哈哈,甚至有時都變成了常態,感覺就是怎麼方便怎麼來。所有的業務都是共用一個資料庫,這不就影響到 ERP 後臺系統了嘛。

通過談我之前的經歷,可以看出並不是 PHP 不行,而是因為沒有正確的使用好 PHP 而把資料庫搞垮了,單純的責怪 PHP 語言本身沒有任何意義。很多時候性能的瓶頸,往往都是先在資料庫層面出現,比如某些查詢沒有命中索引、子查詢嵌套層數過多、長事務造成死鎖、併發大量的操作造成負載過高等等。總而言之,在我的經歷中把 PHP 語言乾出性能瓶頸的場景還是占少數,誇張點可以說幾乎沒有哈哈,可能是我資歷尚淺,不過話又說回來,大家的經歷和我的應該也差不多。最後希望大家可以在資料庫層面多花一些功夫,而不是糾結於這門語言到底行不行了,如果資料庫都不行了,那麼換什麼語言都是白瞎,願這一點大家能有相應的共識。本次的分享內容就到這裡結束了,希望對大家能有所啟發。

感謝大家閱讀,個人觀點僅供參考,歡迎在評論區發表不同觀點。


歡迎關註、分享、點贊、收藏、在看,我是微信公眾號「碼農先森」作者。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫在前面 今天繼續講JavaIO流的知識! Java 文件與流操作 File 類 File 類用於表示文件和文件夾的抽象。 構造方法 public File(String pathname): 使用路徑名創建 File 對象。 public File(String parent, String ch ...
  • 類中使用shared_ptr()的問題 當我們先定義一個指針,然後再用這個指針構造兩個智能指針 int main() { int* pt = new int(); std::shared_ptr<int> p1(pt); std::shared_ptr<int> p2(pt); std::cout ...
  • 先序: 學習編程語言要先學個輪廓,剛開始只用學核心的部分,一些細節、不常用的內容先放著,現用現查即可;把常用的東西弄熟練了在慢慢補充。 1、 安裝 Python 解釋器 為什麼需要安裝 Python Python 語言本身是由解釋器執行的,因此你需要在你的電腦上安裝 Python 解釋器。這個解釋 ...
  • 先序: 學習編程語言要先學個輪廓,剛開始只用學核心的部分,一些細節、不常用的內容先放著,現用現查即可;把常用的東西弄熟練了在慢慢補充。 1. Java 概述 Java 是一種面向對象的編程語言,由 Sun Microsystems(現在的 Oracle)在 1995 年推出。Java 程式可以在任何 ...
  • 正文 今天還是把周末的所有事情一起寫。每到周末都沒什麼寫日記的動力。 周五下午出去吃飯,吃一半,斯視頻突然打過來。我當時有點懵,不知道他要乾什麼,但還是接了。第一個畫面就是他擺弄自行車。他跟我說,自行車踏板和鏈條有問題,踩下去的時候轉一半就動不了了。 經過我們二人一通瞎猜,發現是後面的鏈條掉了,但是 ...
  • 1. Rust 簡介 Rust 的歷史 起源:Rust 語言最初由 Mozilla 研究員 Graydon Hoare 於 2006 年開始設計,並於 2009 年首次公開。 開發:Rust 是 Mozilla 實驗室的一個項目,目的是創建一種能夠保證記憶體安全同時又不犧牲性能的系統編程語言。 發佈: ...
  • 1. make 和 Makefile 1.1. 什麼是make? 1.2. 什麼是Makefile? 1.3. make 與 Makefile的關係 2. Makefile的語法 2.1. 基本語法 2.2. 變數 2.3. 偽目標 2.4. 模式規則 2.5. 自動變數 2.6. 條件判斷 3. ...
  • Torna —— 一款介面文檔解決方案,目標是讓介面文檔管理變得更加方便、快捷。採用團隊協作的方式管理和維護介面文檔,將不同形式的文檔納入進來統一維護。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...