日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql udf limit_锁定服务UDF接口

發(fā)布時間:2024/10/8 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql udf limit_锁定服务UDF接口 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

鎖定服務UDF接口

本節(jié)介紹如何使用鎖定服務用戶定義功能(UDF)接口。要改為使用C語言接口,請參見“鎖定服務C接口”。有關(guān)鎖定服務接口的一般特征,請參見“鎖定服務”。有關(guān)用戶定義函數(shù)的一般信息,請參見“添加用戶定義的功能”。

安裝或卸載UDF鎖定接口

不需要安裝“ Locking Service C接口”中描述的鎖定服務例程,因為它們已內(nèi)置在服務器中。對于映射到對服務例程的調(diào)用的用戶定義函數(shù)(UDF),情況并非如此:必須在使用前安裝UDF。本節(jié)介紹如何執(zhí)行此操作。有關(guān)UDF安裝的一般信息,請參見“添加用戶定義的功能”。

鎖定服務UDF在由plugin_dir系統(tǒng)變量命名的目錄中的插件庫文件中實現(xiàn)。文件的基本名稱為locking_service。每個平臺的文件名后綴都不同(例如,.so對于Unix和類似Unix的系統(tǒng),.dll對于Windows)。

要安裝鎖定服務UDF,請使用以下CREATE FUNCTION語句(.so根據(jù)需要調(diào)整平臺的后綴):CREATE FUNCTION service_get_read_locks RETURNS INT

SONAME 'locking_service.so';

CREATE FUNCTION service_get_write_locks RETURNS INT

SONAME 'locking_service.so';

CREATE FUNCTION service_release_locks RETURNS INT

SONAME 'locking_service.so';

如果在主復制服務器上使用了UDF,請在所有從屬服務器上也安裝它們,以避免復制問題。

一旦安裝,UDF將保持安裝狀態(tài)直到被卸載。要刪除它們,請使用以下DROP FUNCTION語句:DROP FUNCTION service_get_read_locks;

DROP FUNCTION service_get_write_locks;

DROP FUNCTION service_release_locks;

使用UDF鎖定界面

在使用鎖定服務UDF之前,請根據(jù)“安裝或卸載UDF鎖定接口”中提供的說明進行安裝。

要獲取一個或多個讀鎖,請調(diào)用此函數(shù):mysql> SELECT service_get_read_locks('mynamespace', 'rlock1', 'rlock2', 10);

+---------------------------------------------------------------+

| service_get_read_locks('mynamespace', 'rlock1', 'rlock2', 10)|

+---------------------------------------------------------------+

| 1|

+---------------------------------------------------------------+

第一個參數(shù)是鎖名稱空間。最后一個參數(shù)是整數(shù)超時,表示放棄之前要等待多少秒才能獲取鎖。兩者之間的參數(shù)是鎖名稱。

對于剛剛顯示的示例,該函數(shù)獲取具有鎖標識符(mynamespace, rlock1)和的鎖(mynamespace, rlock2)。

要獲取寫鎖而不是讀鎖,請調(diào)用此函數(shù):mysql> SELECT service_get_write_locks('mynamespace', 'wlock1', 'wlock2', 10);

+----------------------------------------------------------------+

| service_get_write_locks('mynamespace', 'wlock1', 'wlock2', 10)|

+----------------------------------------------------------------+

| 1|

+----------------------------------------------------------------+

在這種情況下,鎖定標識符為(mynamespace, wlock1)和(mynamespace, wlock2)。

要釋放名稱空間的所有鎖,請使用以下函數(shù):mysql> SELECT service_release_locks('mynamespace');

+--------------------------------------+

| service_release_locks('mynamespace')|

+--------------------------------------+

| 1|

+--------------------------------------+

每個鎖定函數(shù)返回非零值即可成功。如果功能失敗,則會發(fā)生錯誤。例如,發(fā)生以下錯誤,因為鎖名不能為空:mysql> SELECT service_get_read_locks('mynamespace', '', 10);

ERROR 3131 (42000): Incorrect locking service lock name ''.

會話可以為同一鎖標識符獲取多個鎖。只要其他會話沒有標識符的寫鎖,該會話就可以獲取任意數(shù)量的讀或?qū)戞i。對標識符的每個鎖定請求都獲得一個新的鎖定。以下語句獲取具有相同標識符的三個寫鎖,然后為相同標識符獲取三個讀鎖:SELECT service_get_write_locks('ns', 'lock1', 'lock1', 'lock1', 0);

SELECT service_get_read_locks('ns', 'lock1', 'lock1', 'lock1', 0);

如果此時檢查性能模式metadata_locks表,您將發(fā)現(xiàn)該會話擁有六個具有相同(ns, lock1)標識符的不同鎖。(有關(guān)詳細信息,請參見“鎖定服務監(jiān)視”。)

因為該會話至少持有一個寫鎖(ns, lock1),所以其他任何會話都無法為其獲取鎖,無論是讀還是寫。如果該會話僅持有該標識符的讀鎖,則其他會話可以為其獲取讀鎖,但不獲取寫鎖。

單個鎖獲取調(diào)用的鎖是原子獲取的,但原子性在兩次調(diào)用之間不成立。因此,對于以下語句service_get_write_locks()(在結(jié)果集的每一行中調(diào)用一次)而言,原子性對于每個單獨的調(diào)用均有效,但對于整個語句而言不成立:SELECT service_get_write_locks('ns', 'lock1', 'lock2', 0) FROM t1 WHERE ... ;警告

由于鎖定服務會針對給定鎖標識符的每個成功請求返回單獨的鎖,因此單個語句就有可能獲取大量鎖。例如:INSERT INTO ... SELECT service_get_write_locks('ns', t1.col_name, 0) FROM t1;

這些類型的聲明可能會產(chǎn)生某些不利影響。例如,如果該語句在執(zhí)行過程中部分失敗并回滾,則直到失敗點為止獲取的鎖仍將存在。如果意圖是在插入的行和獲取的鎖之間存在對應關(guān)系,則將無法滿足該意圖。同樣,如果以一定順序授予鎖很重要,請注意結(jié)果集順序可能會有所不同,具體取決于優(yōu)化器選擇的執(zhí)行計劃。由于這些原因,最好將應用程序限制為每個語句只能進行一次鎖定獲取調(diào)用。

鎖定服務監(jiān)控

鎖定服務是使用MySQL Server元數(shù)據(jù)鎖定框架實現(xiàn)的,因此您可以通過檢查“性能模式”metadata_locks表來監(jiān)視獲取或等待的鎖定服務鎖定。

首先,啟用元數(shù)據(jù)鎖定工具:mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'

-> WHERE NAME = 'wait/lock/metadata/sql/mdl';

然后獲取一些鎖并檢查metadata_locks表的內(nèi)容:mysql> SELECT service_get_write_locks('mynamespace', 'lock1', 0);

+----------------------------------------------------+

| service_get_write_locks('mynamespace', 'lock1', 0)|

+----------------------------------------------------+

| 1|

+----------------------------------------------------+

mysql> SELECT service_get_read_locks('mynamespace', 'lock2', 0);

+---------------------------------------------------+

| service_get_read_locks('mynamespace', 'lock2', 0)|

+---------------------------------------------------+

| 1|

+---------------------------------------------------+

mysql> SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, LOCK_TYPE, LOCK_STATUS

-> FROM performance_schema.metadata_locks

-> WHERE OBJECT_TYPE = 'LOCKING SERVICE'\G

*************************** 1. row***************************

OBJECT_TYPE: LOCKING SERVICE

OBJECT_SCHEMA: mynamespace

OBJECT_NAME: lock1

LOCK_TYPE: EXCLUSIVE

LOCK_STATUS: GRANTED

*************************** 2. row***************************

OBJECT_TYPE: LOCKING SERVICE

OBJECT_SCHEMA: mynamespace

OBJECT_NAME: lock2

LOCK_TYPE: SHARED

LOCK_STATUS: GRANTED

鎖定服務鎖的OBJECT_TYPE值為LOCKING SERVICE。例如GET_LOCK(),這與使用函數(shù)獲得的具有的鎖OBJECT_TYPE不同USER LEVEL LOCK。

鎖命名空間,名稱和模式出現(xiàn)在OBJECT_SCHEMA,OBJECT_NAME和LOCK_TYPE列。讀和寫鎖的LOCK_TYPE值分別為SHARED和EXCLUSIVE。

該LOCK_STATUS值GRANTED用于獲取的鎖,PENDING對于正在等待的鎖。您將看到PENDING一個會話是否持有寫鎖,而另一會話是否正在嘗試獲取具有相同標識符的鎖。

鎖定服務UDF接口參考

鎖定服務的SQL接口實現(xiàn)了本節(jié)中描述的用戶定義功能。有關(guān)用法示例,

這些功能具有以下特征:成功返回值非零。否則,將發(fā)生錯誤。

命名空間和鎖名稱必須為非NULL,非空,并且最大長度為64個字符。

超時值必須是整數(shù),表示放棄錯誤之前要等待多少秒才能獲取鎖。如果超時為0,則沒有等待,如果無法立即獲取鎖,該函數(shù)將產(chǎn)生錯誤。

這些鎖定服務UDF可用:service_get_read_locks(namespace,lock_name[,lock_name]...,timeout)

使用給定的鎖名獲取給定名稱空間中的一個或多個讀取(共享)鎖,如果未在給定的超時值內(nèi)獲取鎖,則超時并出錯。

service_get_write_locks(namespace,lock_name[,lock_name]...,timeout)

使用給定的鎖名獲取給定名稱空間中的一個或多個寫(獨占)鎖,如果未在給定的超時值內(nèi)獲取鎖,則超時并出錯。

service_release_locks(namespace)

對于給定的名稱空間,使用service_get_read_locks()和釋放在當前會話中獲取的所有鎖service_get_write_locks()。

命名空間中沒有鎖是沒有錯誤的。

總結(jié)

以上是生活随笔為你收集整理的mysql udf limit_锁定服务UDF接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。