Percona博客學習總結

来源:http://www.cnblogs.com/ivictor/archive/2016/05/06/5465215.html
-Advertisement-
Play Games

1. Upgrading to MySQL 5.7, focusing on temporal types 在MySQL 5.6.4中,對TIME, TIMESTAMP and DATETIME三種時間類型進行了擴充,支持了微秒,並且DATETIME的存儲由之前的8個位元組縮小到5個位元組。 如果從My ...


1. Upgrading to MySQL 5.7, focusing on temporal types

    在MySQL 5.6.4中,對TIME, TIMESTAMP and DATETIME三種時間類型進行了擴充,支持了微秒,並且DATETIME的存儲由之前的8個位元組縮小到5個位元組。

MySQL 5.6.4在Server層新增三種時間類型MYSQL_TYPE_TIME2,MYSQL_TYPE_DATETIME2,MYSQL_TYPE_TIMESTAMP2,併在InnoDB層以二進位的格式存儲,用這種方式來實現時間類型支持小數精度並優化存儲節省空間。

    如果從MySQL 5.5升級到5.6,使用mysql_upgrade,mysql_upgrade並不會顯示的將之前的類型轉換成新類型,只是新建的表會使用新類型。

    但如果是升級到5.7,則mysql_upgrade會將舊類型轉換為新類型,而這可能導致升級的過程比較漫長。

    對於上述情況,如果避免呢?

    1. mysql_upgrade支持upgrade-system-tables選項,在升級時可指該參數,只升級系統表,而不升級普通表

    2. 升級完畢後,再使用alter table或者pt-online-schema-schange修改表的數據類型。

    可通過以下命令查看升級完畢後,各表中上述三個欄位的新舊情況。   

SELECT CASE isc.mtype
           WHEN '6' THEN 'OLD'
           WHEN '3' THEN 'NEW'
       END FORMAT,
       t.schema_name,
       t.table_name
FROM information_schema.tables AS t
INNER JOIN information_schema.columns AS c ON c.table_schema = t.table_schema
AND c.table_name = t.table_name
LEFT OUTER JOIN information_schema.innodb_sys_tables AS ist ON ist.name = concat(t.table_schema,'/',t.table_name)
LEFT OUTER JOIN information_schema.innodb_sys_columns AS isc ON isc.table_id = ist.table_id
AND isc.name = c.column_name
WHERE c.column_type IN ('time','timestamp','datetime')
    AND t.table_schema NOT IN ('mysql','information_schema','performance_schema')
    AND t.table_type = 'base table'
    AND (t.engine = 'innodb');

      註意:5.6中t.shema_name應為t.TABLE_SCHEMA。

      具體可參考:https://www.percona.com/blog/2016/04/27/upgrading-to-mysql-5-7-focusing-on-temporal-types/

2. Best Practices for Configuring Optimal MySQL Memory Usage

    1> The first rule of configuring MySQL memory usage is you never want your MySQL to cause the operating system to swap.Even minor swapping activity can dramatically reduce MySQL performance.

        並不是有了swap就一定是壞事,有可能這些swap是在MySQL啟動之前產生的。重點需要關註的是MySQL運行過程中的SWAP情況。

        這個可以很容易根據vmstat命令中的si和so列看出來。

    2> MySQL的記憶體分配很複雜,There are global buffers, per-connection buffers (which depend on the workload), and some uncontrolled memory allocations (i.e., inside Stored Procedures), all contributing to difficulties in computing how much memory MySQL will really use for your workload.

        比較合理的是查看MySQL使用的virtual memory size (VSZ),這個可通過top命令或者ps aux | grep mysqld查看,單位是KB。

$ ps aux |grep mysqld
bdp      16569  0.0  0.0 103240   868 pts/0    S+   14:35   0:00 grep mysqld
bdp      25883  0.0  0.0 106220  1360 ?        S    Mar25   0:00 /bin/sh ./bin/mysqld_safe
bdp      26716 12.7  2.4 16884956 9652760 ?    Sl   Mar25 7684:17 /home/bdp/mysql/bin/mysqld --basedir=/home/bdp/mysql/ --datadir=/home/bdp/mysql/data/ --plugin-dir=/home/bdp/mysql//lib/plugin --log-error=/home/bdp/mysql/logs/mysqld.log --pid-file=/home/bdp/mysql/run/mysqld/mysqld.pid --socket=/home/bdp/mysql/tmp/mysql.sock
-bash-4.1$ bash

       上圖中,VSZ16884956,大概16.1G    

       VSZ可能會隨著時間發生變化,所以要及時監控這一項,Don’t allow the mysqld process VSZ exceed 90% of the system memory,如果伺服器上還運行了其它的進程,閥值更小,一旦超過這個閥值,要及時發出告警(這點,可通過腳本實現)。

    3> 在大多數情況下,你不能將90%的記憶體分配給MySQL。有以下幾點需要考慮:

        1. 有其它的重要進程運行在同一伺服器上,無論是長期的還是周期性的,或者批量任務。

        2. 對於Innodb,推薦innodb_flush_method=O_DIRECT,這樣就不會使用Operating System File Cache。但是對於MyISAM或者TokuDB,需要操作系統緩存來緩存數據。

        3. 對於MyISAM on disk temporary tables, sort files, some other temporary files,操作系統緩存還是必需的。

    4> 對於一個16G記憶體的伺服器,innodb_buffer_pool_size分配多少比較合適呢?

        Let’s do some math for a specific example. Assume you have a system (physical or virtual) with 16GB of memory. We are only running MySQL on this system, with an InnoDB storage engine and use innodb_flush_method=O_DIRECT, so we can allocate 90% (or 14.4GB) of memory to MySQL. For our workload, we assume connection handling and other MySQL connection-based overhead will take up 1GB (leaving 13.4GB). 0.4GB is likely to be consumed by various other global buffers (innodb_log_buffer_size, Table Caches, other miscellaneous needs, etc.), which now leaves 13GB. Considering the 5-7% overhead that the InnodB Buffer Pool has, a sensible setting is innodb_buffer_pool_size=12G – what we very commonly see working well for systems with 16GB of memory.

    5> 配置完MySQL記憶體,下麵來看看操作系統層面的配置。

        主要涉及以下幾個方面:

        1. SWAP需要開啟麽?

            需要開啟,爭取最小4G,但不能超過伺服器記憶體的25%。有以下兩點原因:

            1> 操作系統可以將記憶體中沒有使用的部分通過swap方式釋放出去,而不是強制它們放到記憶體中。

            2> 如果你的MySQL配置出現錯誤,或者某些進程的記憶體消耗超過預期,會導致MySQL因記憶體溢出(OOM)直接被kill掉,如果有swap,最多是性能下降。

            可通過設置echo 1  /proc/sys/vm/swappiness降低系統對swap的使用,從而避免不必要的swap對性能造成的影響。這個參數定義了系統對swap的使用傾向,預設值為60,值越大表示越傾向於使用swap。

         2. 配置Out Of Memory killer

            echo '-800' > /proc/$(pidof mysqld)/oom_score_adj

            通過設置此值,可使Linux內核優先kill其它進程而不是MySQL。

         3. 在多核伺服器中,關於NUMA的設置。

            在5.7.9中,引入了一個新的系統參數,innodb_numa_interleave,將其設置為1,Enables the NUMA interleave memory policy for allocation of the InnoDB buffer pool

            在之前,可通過numactl --interleave=all進行設置。

            具體可參考:https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/

        

  

   

        

    


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

-Advertisement-
Play Games
更多相關文章
  • Handler背景理解: Handler被最多的使用在了更新UI線程中,但是,這個方法具體是什麼樣的呢?我在這篇博文中先領著大家認識一下什麼是handler以及它是怎麼樣使用在程式中,起著什麼樣的作用。 示例說明: 首先先建立兩個按鈕:一個是start按鈕,作用是開啟整個程式。另一個是終止按鈕end ...
  • MySQL伺服器的主從配置,本來是一件很簡單的事情,無奈不是從零開始,總是在別人已經安裝好的mysql伺服器之上 ,這就會牽扯到,mysql的版本,啟動文件,等一些問題。 http://www.cnblogs.com/roucheng/p/phpmysql.html 不過沒關係,先問清楚兩點 1、m ...
  • 無論何時對基礎數據執行插入、更新或刪除操作,SQL Server 資料庫引擎都會自動維護索引。隨著時間的推移,這些修改可能會導致索引中的信息分散在資料庫中(含有碎片)。當索引包含的頁中的邏輯排序(基於鍵值)與數據文件中的物理排序不匹配時,就存在碎片。碎片非常多的索引可能會降低查詢性能,導致應用程式響 ...
  • 同事在Toad裡面執行SQL語句時,突然無線網路中斷了,讓我檢查一下具體情況,如下所示(有些信息,用xxx替換,因為是在處理那些歷史歸檔數據,使用的一個特殊用戶,所以可以用下麵SQL找到對應的會話信息): SQL> SELECT B.USERNAME , 2 B.SID , 3 B.SERIAL# ... ...
  • Redis是一個開源的使用ANSI C語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集 ...
  • 前言 上一篇[關係資料庫常用SQL語句語法大全][2]主要是關係型資料庫大體結構,本文細說一下關係型資料庫查詢的SQL語法。 ![SQL數據查詢][1] 語法回顧 SQL查詢語句的順序:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。SELECT、FROM是必須 ...
  • 現在使用資料庫來寫存儲過程,動不動參數就會用到xml ,當然羅,優勢也很明顯,參數相對固定,而且靈活,如果要修改或者什麼的,中間介面層也不需要做變化,只需要修改封裝的存儲過程以及程式傳參就ok了。 隨著時間慢慢過,有時候就有一個存儲過程,一個xml 來應對整個表的新增,修改,刪除的情況了。而對於這個 ...
  • T-SQL解析json字元串函數及其使用示例 參考博文:http://www.cnblogs.com/huangtailang/p/4277809.html 1、解析json字元串函數,返回表變數 2、存儲過程調用示例 ... ...
一周排行
    -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# ...