我在数据库中确定了多个设置为80
或90%
的标识列。我希望将它们全部设置为100%
。
是否有人知道使用Merge Replication
更改标识列上的填充因子是否会导致任何问题?
答案 0 :(得分:1)
FillFactor仅在通过使用FillFactor设置保留空间百分比来重建索引时进入图片。
使用合并复制,可以通过触发器跟踪两个源的更改,并保持同步。
当你将fillfactor设置为80%时,20%的空间仍然可以用于插入。如果你设置为100%,你不会留下任何空间,你可能会有页面拆分。{{3就日志增长而言,你的插入有可能会变慢。
但是对于标识列,所有值都会增加,因此它们将在逻辑上添加到页面末尾。因此,设置值0或100应该可以提高性能。但是填充因子只影响叶级页面和什么如果您更新任何可能导致大小超过页面总长度的行。这是Page splits are very expensiv在此案例中所说的
如果新数据在整个表中均匀分布,则0或100以外的非零填充因子可以提高性能。但是,如果将所有数据添加到表的末尾,则不会填充索引页中的空白区域。例如,如果索引键列是IDENTITY列,则新行的键始终在增加,索引行在逻辑上会添加到索引的末尾。 如果现有行将使用延长行大小的数据进行更新,请使用小于100的填充因子。每个页面上的额外字节将有助于最大限度地减少行中额外长度导致的页面拆分。强>
设置一个好的fillFactor值取决于你的数据库的使用方式.Heavy Inserts(更多应该是免费的,fillfactor值应该更少,但选择将是一些代价高昂的东西).Less插入(留下一些填充因子)值)
简单搜索产生了这么多MSDN。但是你应该先测试它们并使其适应你的场景
答案 1 :(得分:1)
FILLFACTOR 主要用于索引。
由于您要将填充因子更改为100.这意味着您需要删除并使用 Fillfactor 100在合并表上重新创建索引。
如果在合并复制中,'复制群集索引' 和'复制非群集索引' 是 TRUE 对于所有文章属性,一旦在发布者上重新创建索引,它也将在其他订阅者上复制。
所以,如果你有大量合并表与Index,我会建议在下班时间实现它,因为索引创建需要时间来复制订阅者。
答案 2 :(得分:1)
您也可以通过此查询检查填充因子。是的,但正如@Ragesh所说,每当我们改变填充因子(复制)时都会影响性能。
填充因子与索引直接相关。每次我们都在这里 “索引”一词,我们直接将其与绩效联系起来。指数增强 性能 - 这是事实,但还有其他几种选择 随之而来。
buy.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent actionEvent)
{
int r;
r = table.getSelectedRow();
String num = (String) table.getValueAt(r, 0);//numele jucariei
//String cop = (String) table.getValueAt(r, 3);//nr de bucati
try
{
pq = stmt.executeQuery("SELECT *" + "FROM buyid_view");
xv = stmt.executeQuery("SELECT toyid, copies " + "FROM alldatas_view" + "WHERE toyname ='"+num+"'");
int buyid = pq.getInt("buyid");
int toyid = xv.getInt("toyid");
int copies = xv.getInt("copies");
copies = copies-1;
CallableStatement cstmt = con.prepareCall("INSERT INTO buy (buyid, toyid)" + "VALUES (?,?)");
cstmt.setInt("buyid", buyid);
cstmt.setInt("toyid", toyid);
ResultSet rs = cstmt.executeQuery();
JOptionPane.showMessageDialog(null, "You brought a toy.");
for(int i = 0; i < table.getRowCount(); i++)
for(int j = 0; j < table.getColumnCount(); j++)
table.setValueAt("", i, j);
try
{
rs = stmt.executeQuery("UPDATE toys set copies "+ copies +"WHERE toyid= '"+toyid+"'");
}
catch (SQLException e)
{
JOptionPane.showMessageDialog(null, e.getMessage());
}
int i = 0;
try
{
rs = stmt.executeQuery("SELECT *"+
"FROM availablebooks_view");
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try {
if(rs.next())
{
table.setValueAt(rs.getString(1), i, 0);
table.setValueAt(rs.getString(2), i, 1);
table.setValueAt(rs.getString(3), i, 2);
i++;
while(rs.next())
{
table.setValueAt(rs.getString(1), i, 0);
table.setValueAt(rs.getString(2), i, 1);
table.setValueAt(rs.getString(3), i, 2);
i++;
}
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
}
}
catch (SQLException e)
{
if(e.getMessage().contains("You have to pay!"))
warning(frame, "You didn't pay all your products");
else
warning(frame, e.getMessage());
}
}
});
以下是您的查询的好文章和解释。
http://sqlmag.com/blog/what-fill-factor-index-fill-factor-and-performance-part-1