1. 程式人生 > 其它 >(2020-12-29)談談vue.js中inheritAttrs和$attrs的用法

(2020-12-29)談談vue.js中inheritAttrs和$attrs的用法

  • 概覽:比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的資訊,如信箱,文章等等。

  • 事務條件:必須滿足4個條件(ACID): Atomicity(原子性)、Consistency(一致性)、Isolation(隔離性)、Durability(永續性)。

  • 事務隔離級別:讀未提交(級別最低),讀已提交(避免髒讀),可重複讀(避免髒讀、不可重複讀),序列化(避免髒讀、不可重複讀、幻讀,效率也最低)。

  • 備註:在 MySQL 中只有使用了 Innodb 資料庫引擎的資料庫或表才支援事務。事務併發並不進行事務隔離造成的髒讀、幻讀、不可重複讀。mysql支援上面4種隔離級別,預設為可重複讀。

  1. MySQL有三種鎖的級別:

    表級鎖:多執行緒共享讀鎖,預設加排他表鎖(另一個執行緒想要寫資料的話,就必須要先取得排他訪問),開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。

      表級鎖有兩種模式:表共享讀鎖(Lock table 表名 read,只能執行select操作),表獨佔寫鎖(Lock table 表名 write,無法執行select操作)。

      如何加表鎖:查詢更新語句會自動給涉及的所有表加讀寫鎖,過程並不需要使用者干預,上面那個是手動操作的。

      MyISAM表鎖優化建議:

      1.查詢表級鎖爭用情況:show status like 'Table%';可以查看錶鎖定爭奪次數,由於鎖定級別是不可能改變的,所以儘可能讓鎖定的時間變短,提高併發操作。如果Table_locks_waited與Table_locks_immediate的比值較大,可能需要調整Query語句,或者更改儲存引擎,亦或者需要調整業務邏輯。

      

      2.縮短鎖定時間:盡兩減少大的複雜Query,將複雜Query分拆成幾個小的Query分佈進行;儘可能的建立足夠高效的索引,讓資料檢索更迅速;儘量讓MyISAM儲存引擎的表只存放必要的資訊,控制欄位型別。

      3.分離能並行的操作:MyISAM引擎讀寫是互相阻塞的,但MyISAM不是完全的序列化,ConcurrentInsert(併發插入)可以控制其併發插入的行為。

        a、concurrent_insert為0,不允許併發插入。

        b、concurrent_insert為1,如果MyISAM表中沒有空洞(即表的中間沒有被刪除的行),MyISAM允許在一個程序讀表的同時,另一個程序從表尾插入記錄。這也是MySQL的預設設定。

        c、concurrent_insert為2,無論MyISAM表中有沒有空洞,都允許在表尾併發插入記錄。

       4.合理利用讀寫優先順序:讀寫互相阻塞,SQL的表級鎖定對於讀和寫是有不同優先順序設定的,預設情況下是寫優先順序要大於讀優先順序。如果系統是一個以讀為主,可以設定此引數,通過執行命令SET LOW_PRIORITY_UPDATES=1,使該連線讀比寫的優先順序高。如果以寫為主,則不用設定。

      5.長時間執行的查詢操作,也會使寫程序“餓死”,可以通過使用中間表或者夜間執行預統計等措施,減少鎖衝突。

  行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。

    行級鎖有4種模式:共享鎖、意向共享鎖、排他鎖、意向排它鎖。

    如何加行鎖:意向鎖是InnoDB自動加的;UPDATE、DELETE和INSERT語句,InnoDB會自動給涉及資料集加排他鎖;對於普通SELECT語句,InnoDB不會加任何鎖;事務可以通過以下語句顯示給記錄集加共享鎖或排他鎖。

    

     InnoDB行鎖優化建議(效能損耗可能比表級鎖定會要更高一些,但是在整體併發處理能力方面要遠遠優於MyISAM的表級鎖定的):

      1.InnoDB行鎖是通過給索引上的索引項加鎖來實現的,只有通過索引條件檢索資料,InnoDB才使用行級鎖,否則,InnoDB將使用表鎖。

      2.即便在條件中使用了索引欄位,但是否使用索引來檢索資料是由MySQL通過判斷不同執行計劃的代價來決定的,如果MySQL認為全表掃描效率更高,比如對一些很小的表,它就不會使用索引,這種情況下InnoDB將使用表鎖,而不是行鎖。因此,在分析鎖衝突時,別忘了檢查SQL的執行計劃,以確認是否真正使用了索引。

      3.儘可能減少基於範圍的資料檢索過濾條件,避免因為間隙鎖帶來的負面影響而鎖定了不該鎖定的記錄。

      4.儘量控制事務的大小,減少鎖定的資源量和鎖定時間長度。

    死鎖解決方案: 

    1. 類似業務模組中,儘可能按照相同的訪問順序來訪問,防止產生死鎖;

    2. 在同一個事務中,儘可能做到一次鎖定所需要的所有資源,減少死鎖產生概率;

    3. 對於非常容易產生死鎖的業務部分,可以嘗試使用升級鎖定顆粒度,通過表級鎖定來減少死鎖產生的概率。

  頁級鎖:開銷和加鎖時間界於表鎖和行鎖之間。

事務控制語句:BEGIN 開始一個事務,ROLLBACK 事務回滾,COMMIT 事務確認,SET AUTOCOMMIT=0 禁止自動提交,SET AUTOCOMMIT=1 開啟自動提交。

 

參考部落格:https://blog.csdn.net/yinjinshui/article/details/101676489,https://blog.csdn.net/yinjinshui/article/details/101689128