Skip to content

Commit 1b4b02b

Browse files
yirensumsumyirenrenetapopovaNataliaIvakina
authored
Adding new limited allocation procedures (#1697)
In this PR, we want to add documentation for the following cluster procedures: ``` dbms.cluster.deallocateDatabaseFromServer(server, database, dryrun) dbms.cluster.deallocateNumberOfDatabases(server, number, dryrun) dbms.cluster.deallocateDatabaseFromServers(servers, database, dryrun) dbms.cluster.reallocateDatabase(database, dryrun) dbms.cluster.reallocateNumberOfDatabases(number, dryrun) ``` We also add some scenarios in which a user might use these new procedures for --------- Co-authored-by: sumyiren <[email protected]> Co-authored-by: Reneta Popova <[email protected]> Co-authored-by: NataliaIvakina <[email protected]>
1 parent 5d1d09a commit 1b4b02b

File tree

2 files changed

+212
-11
lines changed

2 files changed

+212
-11
lines changed

modules/ROOT/pages/clustering/databases.adoc

Lines changed: 101 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ The number of both primary and secondary servers to host a database can be set w
88
The command `CREATE DATABASE` can be used to specify the initial topology and `ALTER DATABASE` can be used to change the topology once the database is created.
99
If a database is no longer needed, the command `DROP DATABASE` deletes the database from the cluster.
1010

11+
[[create-database]]
1112
== `CREATE DATABASE`
1213

1314
The command to create a database in a cluster is not significantly different from the command to create a database in a non-clustered environment (see xref:database-administration/standard-databases/create-databases.adoc[Create, start, and stop databases] for more information on database management on single servers).
@@ -35,12 +36,13 @@ However, over time, or after several `CREATE DATABASE` commands have been issued
3536
At this point you can run `REALLOCATE DATABASES` to make the cluster re-balance databases across all servers that are part of the cluster.
3637
====
3738

38-
[[alter-topology]]
39+
[[alter-database]]
3940
== `ALTER DATABASE`
4041

4142
To alter the topology of or read/write access to a database after it has been created, use the command `ALTER DATABASE`.
4243

43-
=== Alter topology
44+
[[alter-topology]]
45+
=== Alter database topology
4446

4547
To change the topology of the database `foo` from the previous example, the command can look like this:
4648

@@ -91,7 +93,8 @@ ALTER DATABASE nonExisting IF EXISTS SET TOPOLOGY 1 PRIMARY 0 SECONDARY
9193
// * `OPTIMAL_DISC_USAGE`
9294
// * `ALL`
9395

94-
=== Alter access
96+
[[alter-access]]
97+
=== Alter database access
9598

9699
To alter the access to the database `foo`, the syntax looks like this:
97100

@@ -102,14 +105,106 @@ ALTER DATABASE foo SET ACCESS {READ ONLY | READ WRITE}
102105

103106
By default, a newly created database has both read and write access.
104107

108+
[role=label--new-5.23]
109+
[[deallocate-databases]]
110+
== Deallocate databases
111+
112+
To relieve the load of a specific server(s), you can use one of the following procedures to deallocate databases causing the pressure from the server(s):
113+
114+
* xref:reference/procedures.adoc#procedure_dbms_cluster_deallocateDatabaseFromServer[`dbms.cluster.deallocateDatabaseFromServer("server-name", "database-name")`]
115+
* xref:reference/procedures.adoc#procedure_dbms_cluster_deallocateDatabaseFromServers[`dbms.cluster.deallocateDatabaseFromServers(git["server-name1", "server-name2"\], "database-name")`]
116+
* xref:reference/procedures.adoc#procedure_dbms_cluster_deallocateNumberOfDatabases[`dbms.cluster.deallocateNumberOfDatabases("server-name", number)`]
117+
118+
[NOTE]
119+
====
120+
You must have the `SERVER MANAGEMENT` privilege to execute these procedures.
121+
====
122+
123+
For example, `server01` hosts two small databases, `foo` and `bar`, and one very large database `baz`, while other servers contain fewer or smaller databases, and `server01` is under pressure.
124+
125+
You can use one of the following approaches to deallocate `baz` from `server01` or to deallocate a number of databases from `server01`:
126+
127+
.Deallocating a database from a server
128+
[source, cypher]
129+
----
130+
// With dry run
131+
neo4j@system> CALL dbms.cluster.deallocateDatabaseFromServer("server01", "baz", true);
132+
133+
// Without dry run
134+
neo4j@system> CALL dbms.cluster.deallocateDatabaseFromServer("server01", "baz");
135+
136+
----
137+
138+
.Deallocating a database from multiple servers
139+
[source, cypher]
140+
----
141+
// With dry run
142+
neo4j@system> CALL dbms.cluster.deallocateDatabaseFromServers(["server01", "server02"], "baz", true);
143+
144+
// Without dry run
145+
neo4j@system> CALL dbms.cluster.deallocateDatabaseFromServers(["server01", "server02"], "baz");
146+
147+
----
148+
149+
.Deallocating three databases from a server
150+
[source, cypher]
151+
----
152+
// With dry run
153+
neo4j@system> CALL dbms.cluster.deallocateNumberOfDatabases("server01", 3, true);
154+
155+
// Without dry run
156+
neo4j@system> CALL dbms.cluster.deallocateNumberOfDatabases("server01", 3);
157+
----
158+
159+
160+
[[reallocate-databases]]
105161
== Reallocate databases
106162

107-
If there is a need to rebalance database allocation across the cluster, for example if new servers have been added, use the `REALLOCATE DATABASE[S]`.
108-
This command can be used with `DRYRUN` to preview the new allocation of databases.
163+
To rebalance all database allocations across the cluster, for example, because you added new servers, use either procedures or Cypher commands to reallocate databases onto the new servers.
164+
165+
[role=label--new-5.23]
166+
[[reallocate-databases-procedure]]
167+
=== Reallocate databases using a procedure
168+
169+
You can use the procedure xref:reference/procedures.adoc#procedure_dbms_cluster_reallocateDatabase[`dbms.cluster.reallocateDatabase()`] to offload a specific database from all servers containing it onto new servers or xref:reference/procedures.adoc#procedure_dbms_cluster_reallocateNumberOfDatabases[dbms.cluster.reallocateNumberOfDatabases] to rebalance all database allocations across the cluster and relieve overloaded servers.
170+
These procedures do not require a server name and can be executed with or without a dry run.
171+
172+
[NOTE]
173+
====
174+
You must have the `SERVER MANAGEMENT` privilege to execute these procedures.
175+
====
176+
177+
For example, you add three new servers and want to move a very large database, `baz`, from all the servers containing it to the new servers.
178+
179+
.Reallocate one database to new servers
180+
[source, cypher]
181+
----
182+
// With dry run
183+
neo4j@system> CALL dbms.cluster.reallocateDatabase("baz", true);
184+
185+
// Without dry run
186+
neo4j@system> CALL dbms.cluster.reallocateDatabase("baz");
187+
----
188+
189+
.Reallocating a number of databases to new servers
190+
[source, cypher]
191+
----
192+
// With dry run
193+
neo4j@system> CALL dbms.cluster.reallocateNumberOfDatabases(3, true);
194+
195+
// Without dry run
196+
neo4j@system> CALL dbms.cluster.reallocateNumberOfDatabases(3);
197+
----
198+
199+
[[reallocate-databases-cypher]]
200+
=== Reallocate databases using a Cypher command
201+
202+
You can use the Cypher command `REALLOCATE DATABASES` to rebalance all database allocations across the cluster and relieve overloaded servers.
203+
This command can also be used with `DRYRUN` to preview the new allocation of databases.
109204

110205
[NOTE]
111206
====
112-
`DRYRUN` is introduced in Neo4j 5.2 and thus does not work in previous versions.
207+
`DRYRUN` is available from Neo4j 5.2 and later.
113208
====
114209

115210
[source,cypher]

modules/ROOT/pages/reference/procedures.adoc

Lines changed: 111 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -286,12 +286,37 @@ In 4.2, signature changed to `db.listLocks() :: (mode :: STRING, resourceType ::
286286
| xref:reference/procedures.adoc#procedure_dbms_cluster_switchdiscoveryserviceversion[`dbms.cluster.switchDiscoveryServiceVersion()`]
287287
| label:no[]
288288
| label:yes[]
289-
| label:admin-only[] label:new[Introduced in 5.22]
289+
| label:new[Introduced in 5.22] label:admin-only[]
290290

291291
| xref:reference/procedures.adoc#procedure_dbms_cluster_showparalleldiscoverystate[`dbms.cluster.showParallelDiscoveryState()`]
292292
| label:no[]
293293
| label:yes[]
294-
| label:admin-only[] label:new[Introduced in 5.22]
294+
| label:new[Introduced in 5.22] label:admin-only[]
295+
296+
| xref:reference/procedures.adoc#procedure_dbms_cluster_deallocateDatabaseFromServer[`dbms.cluster.deallocateDatabaseFromServer()`]
297+
| label:no[]
298+
| label:yes[]
299+
| label:new[Introduced in 5.23] label:server-management[`SERVER MANAGEMENT` privilege only]
300+
301+
| xref:reference/procedures.adoc#procedure_dbms_cluster_deallocateDatabaseFromServers[`dbms.cluster.deallocateDatabaseFromServers()`]
302+
| label:no[]
303+
| label:yes[]
304+
| label:new[Introduced in 5.23] label:server-management[`SERVER MANAGEMENT` privilege only]
305+
306+
| xref:reference/procedures.adoc#procedure_dbms_cluster_deallocateNumberOfDatabases[`dbms.cluster.deallocateNumberOfDatabases()`]
307+
| label:no[]
308+
| label:yes[]
309+
| label:new[Introduced in 5.23] label:server-management[`SERVER MANAGEMENT` privilege only]
310+
311+
| xref:reference/procedures.adoc#procedure_dbms_cluster_reallocateDatabase[`dbms.cluster.reallocateDatabase()`]
312+
| label:no[]
313+
| label:yes[]
314+
| label:new[Introduced in 5.23] label:server-management[`SERVER MANAGEMENT` privilege only]
315+
316+
| xref:reference/procedures.adoc#procedure_dbms_cluster_reallocateNumberOfDatabases[`dbms.cluster.reallocateNumberOfDatabases()`]
317+
| label:no[]
318+
| label:yes[]
319+
| label:new[Introduced in 5.23] label:server-management[`SERVER MANAGEMENT` privilege only]
295320

296321
| xref:reference/procedures.adoc#procedure_dbms_components[`dbms.components()`]
297322
| label:yes[]
@@ -384,6 +409,11 @@ In 4.2, signature changed to `db.listLocks() :: (mode :: STRING, resourceType ::
384409
| label:yes[]
385410
| label:admin-only[] label:not-aura[Not available on Aura]
386411

412+
| xref:reference/procedures.adoc#procedure_dbms_setDatabaseAllocator[`dbms.setDatabaseAllocator()`]
413+
| label:no[]
414+
| label:yes[]
415+
| label:admin-only[]
416+
387417
| xref:reference/procedures.adoc#procedure_dbms_setDefaultAllocationNumbers[`dbms.setDefaultAllocationNumbers()`]
388418
| label:no[]
389419
| label:yes[]
@@ -1842,7 +1872,7 @@ It will still run with the `Admin` privilege, but that should be considered depr
18421872
====
18431873

18441874
[[procedure_dbms_cluster_switchdiscoveryserviceversion]]
1845-
[role=label--enterprise-edition label--admin-only label--new-5.22]
1875+
[role=label--enterprise-edition label--new-5.22 label--admin-only]
18461876
.dbms.cluster.switchDiscoveryServiceVersion()
18471877
[cols="<15s,<85"]
18481878
|===
@@ -1861,18 +1891,94 @@ m|DBMS
18611891
|===
18621892

18631893
[[procedure_dbms_cluster_showparalleldiscoverystate]]
1864-
[role=label--enterprise-edition label--admin-only label--new-5.22]
1894+
[role=label--enterprise-edition label--new-5.22 label--admin-only ]
18651895
.dbms.cluster.showParallelDiscoveryState()
18661896
[cols="<15s,<85"]
18671897
|===
18681898
| Description
18691899
a| Compare the states of Discovery service V1 and Discovery service V2.
18701900
| Signature
1871-
m| dbms.cluster.showParallelDiscoveryState() :: (mode :: STRING, stateComparison :: STRING)
1901+
m| dbms.cluster.showParallelDiscoveryState() :: (mode :: STRING, stateComparison :: STRING, v1ServerCount :: STRING, v2ServerCount :: STRING)
18721902
| Mode
18731903
m|DBMS
18741904
|===
18751905

1906+
[[procedure_dbms_cluster_deallocateDatabaseFromServer]]
1907+
[role=label--enterprise-edition label--new-5.23]
1908+
.dbms.cluster.deallocateDatabaseFromServer()
1909+
[cols="<15s,<85"]
1910+
|===
1911+
| Description
1912+
a| Deallocate a specific user database from a specific server.
1913+
| Signature
1914+
m| dbms.cluster.deallocateDatabaseFromServer(server :: STRING, database :: STRING, dryrun = false :: BOOLEAN) :: (database :: STRING, fromServerName :: STRING, fromServerId :: STRING, toServerName :: STRING, toServerId :: STRING, mode :: STRING)
1915+
| Mode
1916+
m|WRITE
1917+
|===
1918+
1919+
This procedure requires the `SERVER MANAGEMENT` privilege.
1920+
1921+
[[procedure_dbms_cluster_deallocateDatabaseFromServers]]
1922+
[role=label--enterprise-edition label--new-5.23]
1923+
.dbms.cluster.deallocateDatabaseFromServers()
1924+
[cols="<15s,<85"]
1925+
|===
1926+
| Description
1927+
a| Deallocate a specific user database from a list of servers.
1928+
| Signature
1929+
m| dbms.cluster.deallocateDatabaseFromServers(servers :: LIST<STRING>, database :: STRING, dryrun = false :: BOOLEAN) :: (database :: STRING, fromServerName :: STRING, fromServerId :: STRING, toServerName :: STRING, toServerId :: STRING, mode :: STRING)
1930+
| Mode
1931+
m|WRITE
1932+
|===
1933+
1934+
This procedure requires the `SERVER MANAGEMENT` privilege.
1935+
1936+
[[procedure_dbms_cluster_deallocateNumberOfDatabases]]
1937+
[role=label--enterprise-edition label--new-5.23]
1938+
.dbms.cluster.deallocateNumberOfDatabases()
1939+
[cols="<15s,<85"]
1940+
|===
1941+
| Description
1942+
a| Deallocate a number of user databases from a specific server.
1943+
| Signature
1944+
m| dbms.cluster.deallocateNumberOfDatabases(server :: STRING, number :: INTEGER, dryrun = false :: BOOLEAN) :: (database :: STRING, fromServerName :: STRING, fromServerId :: STRING, toServerName :: STRING, toServerId :: STRING, mode :: STRING)
1945+
| Mode
1946+
m|WRITE
1947+
|===
1948+
1949+
This procedure requires the `SERVER MANAGEMENT` privilege.
1950+
1951+
[[procedure_dbms_cluster_reallocateDatabase]]
1952+
[role=label--enterprise-edition label--new-5.23]
1953+
.dbms.cluster.reallocateDatabase()
1954+
[cols="<15s,<85"]
1955+
|===
1956+
| Description
1957+
a| Reallocate a specific database.
1958+
| Signature
1959+
m| dbms.cluster.reallocateDatabase(database :: STRING, dryrun = false :: BOOLEAN) :: (database :: STRING, fromServerName :: STRING, fromServerId :: STRING, toServerName :: STRING, toServerId :: STRING, mode :: STRING)
1960+
| Mode
1961+
m|WRITE
1962+
|===
1963+
1964+
This procedure requires the `SERVER MANAGEMENT` privilege.
1965+
1966+
1967+
[[procedure_dbms_cluster_reallocateNumberOfDatabases]]
1968+
[role=label--enterprise-edition label--new-5.23]
1969+
.dbms.cluster.reallocateNumberOfDatabases()
1970+
[cols="<15s,<85"]
1971+
|===
1972+
| Description
1973+
a| Reallocate a specified number of user databases.
1974+
| Signature
1975+
m| dbms.cluster.reallocateNumberOfDatabases(number :: INTEGER, dryrun = false :: BOOLEAN) :: (database :: STRING, fromServerName :: STRING, fromServerId :: STRING, toServerName :: STRING, toServerId :: STRING, mode :: STRING)
1976+
| Mode
1977+
m|WRITE
1978+
|===
1979+
1980+
This procedure requires the `SERVER MANAGEMENT` privilege.
1981+
18761982
[[procedure_dbms_components]]
18771983
.dbms.components()
18781984
[cols="<15s,<85"]

0 commit comments

Comments
 (0)