好吧,我试过寻找这个答案,但没有运气.我工作的SQL Server上有大约50个数据库,我几乎每天都要检查一下,看看是否可以通过缩小来释放任何空间.我们的驱动器往往会填满很多,所以这就是为什么它几乎是日常工作的原因.
有没有快速的方法来检查哪些数据库实际上有可用的可用空间?有谁知道系统/自定义存储过程或系统视图可以生成每个数据库的列表以及可以在该数据库上缩小多少可用空间?
顺便说一下,使用sql server 2005.
是否有可能在Linux(和/或其他Unix)上"缩小"文件?我想将它用于持久队列(没有适合我需要的现有实现).从文件的结尾我猜可以使用truncate().
这是有问题的配置设置: -keep @interface *
此帖子中引用了此设置:https://stackoverflow.com/a/17437740/367544
在Proguard手册中:https://www.guardsquare.com/en/proguard/manual/troubleshooting#notkept
但手册(或帖子)并未解释此配置设置的工作原理或原因.我认为这个配置值将保留您的应用程序中定义的任何注释.我强调这个词定义这里是因为我想比较它在那里的注释使用.因此,如果我在我的代码中定义了一个注释,public @interface MyAnnotation {}
那么我希望这个配置设置能够保留它.但是,如果我在另一个类中使用我的注释,public class MyClass { @MyAnnotation public void run(){} }
那么我不希望这个配置设置在那里保留它.我认为要保留使用它的注释,你需要一个像这样的设置-keep class * { @interface <methods>; }
.但是,我的理解显然是错误的,因为-keep @interface *
配置设置确实保留了使用它们的注释.
任何人都可以解释为什么-keep @interface *
配置设置会影响其他类中使用的注释吗?此外,Proguard手册从未解释过如何使用@interface
关键字.这是任何注释的通配符吗?或者它是否像我的例子中那样引用了注释的定义public @interface MyAnnotation {}
?或者它完全是另一回事?
我有一个大约4GB的数据库.我复制了该数据库并删除了99%的数据,因为我需要一个只包含模式和基本数据的数据库(主要是保留静态数据).
现在的问题是MDF文件的大小仍然是~4GB.如果我读取表的大小(例如,使用它),它们总和不到20 MB.日志文件已经缩小,但我运行的脚本都没有用于收缩DB文件.
注意:我通常不这样做,但这次我需要缩小数据库(我知道不推荐)
命令:
exec sp_spaceused
Run Code Online (Sandbox Code Playgroud)
输出:
database_name database_size unallocated_space
AccudemiaEmptyDb 3648.38 MB 4.21 MB
Run Code Online (Sandbox Code Playgroud)
命令:
select object_name(id) as objname, SUM(dpages*8) as dpages, COUNT(*) as cnt
from sysindexes
group by id
order by dpages desc
Run Code Online (Sandbox Code Playgroud)
输出:
object_name(id) sum(dpages*8) count(*)
sysdercv 675328 1
sysxmitqueue 359776 1
sysdesend 72216 1
sysconvgroup 47704 1
sysobjvalues 4760 5
sec_OperationAccessRule 3472 5
sec_PageAccessRule 2232 5
syscolpars 656 11
AuditObjects 624 2
sysmultiobjrefs 408 5
HelpPage 376 8
sysschobjs 352 …
Run Code Online (Sandbox Code Playgroud) 在SQL Server 2008中,我试图BULK INSERT一个大小约为1GB的CSV.正如我所做的那样,它正在创建一个巨大的tempdb.mdf文件.现在,这个1GB CSV文件的容量为35GB.
我已经尝试过Microsoft提供的各种解决方案,但它们似乎不起作用.
我认为在非生产系统上"缩小"tempdb.mdf文件的最简单方法是在SQL服务关闭时删除它.
这会导致任何问题吗?如果是这样,可以预期会出现什么样的问题?
编辑
1)这是CSV中的一行(它有大约4M行):
PS D:\> gc .\map.items.csv | select -last 1
40747646;jdbc:patent/8046822;8683;other/patent;12/31/69 16:00:00.00 PST;E6 E6 80 6D FD 6D 0B 5F 44 66 4E 1C 35 DE 46 BB 19 36 3C 31 37 67 4D 1D DF 58 A5 99 A8 A0 3B 52;crawled;full_patent_db2;Electronic apparatus, function selection method of electronic apparatus and management system of electronic apparatus;Sony Corporation;Tokyo;03;G06F21/00
Run Code Online (Sandbox Code Playgroud)
2)这是DB描述表信息(没有异国情调,没有触发器):https://gist.github.com/mlissner/4cd13db5a1bbae91dd50
3)我已将数据库设置为简单恢复模型.
在R8正式文件说要激活额外的优化我必须在插入此gradle.properties
文件:
android.enableR8.fullMode=true
Run Code Online (Sandbox Code Playgroud)
文档说,为了使应用程序工作,我必须设置一些保留规则,但没有关于它如何工作以及它执行哪些操作的详细信息:
由于额外的优化使 R8 的行为与 ProGuard 不同,它们可能需要您包含额外的 ProGuard 规则以避免运行时问题。例如,假设您的代码通过 Java 反射 API 引用了一个类。默认情况下,R8 假定您打算在运行时检查和操作该类的对象——即使您的代码实际上没有这样做——并且它会自动保留该类及其静态初始化程序。
然而,当使用“完整模式”时,R8 不会做出这个假设,如果 R8 断言您的代码在运行时从不使用该类,它会从您的应用程序的最终 DEX 中删除该类。也就是说,如果您想保留类及其静态初始值设定项,您需要在规则文件中包含一个保留规则来做到这一点。
文档建议的常见问题解答的链接仅说明了这一点:
R8全模式
在完整模式下,R8 执行更积极的优化,这意味着可能需要额外的 ProGuard 配置规则。本节重点介绍使用完整模式时遇到的一些常见问题。
实际效果如何android.enableR8.fullMode
?
非常感谢!
如果我收缩它,数据库(SQL Server 2005)的性能是否会降低?
应用缩小时mdf和ldf文件究竟发生了什么(Internals ???)
我想移动我记忆中的一大块数据.不幸的是,这些数据被保存为数组,我无法改变它.我不能使用循环数组,因为我不想改变的一些fortran方法也使用相同的内存.最重要的是,在运动之间非常频繁地访问阵列.所以我可以这样做:
int *array = (int*) malloc(sizeof(int)*5);
int *array2=NULL;
//Now i want to move my data one step to the left
array=(int*) realloc(array,6);
array2=array+1;
memmove(array,array2,5*sizeof(int));
array=(int*) realloc(array,5);
Run Code Online (Sandbox Code Playgroud)
这应该工作正常,但它看起来很浪费;).如果我可以告诉我的编译器拿走缩小数组左侧的数据,我的数据会在内存中蔓延,但我不需要进行任何复制.像这样:
int *array = (int*) malloc(sizeof(int)*5);
//Now i want to move my data one step to the left
array=(int*) realloc(array,6);
array=(int*) realloc_using_right_part_of_the_array(array,5);
Run Code Online (Sandbox Code Playgroud)
所以基本上我想用指针完成,array+1
剩下的4个字节被释放.我打得四处free()
和malloc()
,但它没有工作......我知道,realloc的还可能会导致的memcpy调用,但不是每次!所以它可能会更快,不是吗?
我有一个宽度有限的标签,我需要它来自动调整文本的字体大小以适应.由于我需要加下划线的文本,我为此标签分配了一个属性字符串:
[_commentsLabel setAttributedText:[[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%d comments", [comments count]] attributes:@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}]];
Run Code Online (Sandbox Code Playgroud)
如您所见,注释的数量将定义文本的长度.但出于某种原因,文本并没有缩小.最小字体比例设置为0.1并选中Tighten Letter Spacing.
我认为它可能与我正在使用的自定义字体有关,但即使使用系统默认字体,文本也会被剪裁.
通常,使用 -keep 排除类可以防止类被混淆
然而,它也可以防止它被缩小。
是否可以定义一个 proguard-project.txt 来缩小所有类,除了那些用 -keep 排除的类,但也只混淆类的特定子集?
目的是使用 proguard 保持在 android 65k 方法限制以下,同时也仅在 APK 中混淆第一方代码。
谢谢
shrink ×10
sql-server ×3
android ×2
java ×2
obfuscation ×2
proguard ×2
android-r8 ×1
annotations ×1
c ×1
file ×1
ios ×1
optimization ×1
realloc ×1
sql ×1
t-sql ×1
tempdb ×1
truncate ×1
uilabel ×1